Event bei Comboboxauswahl verhindern

Hallo zusammen,
jetzt muss ich doch noch ne doofe Frage stellen:

Ich habe eine JTable bei der einige Zellen JComboBoxen sind. In meinem TableModel möchte ich, wenn sich ein Wert in der Box ändert (Sie ist probeweise mal mit den Zahlen 1-5 gefüllt) diesen abgreifen und damit einen anderen Wert berechnen.

Das Problem ist aber, dass die Methode “setValueAt” auch beim anwählen der ComboBox startet. Da dann aber kein Wert ausgewählt ist erhalte ich eine Nullpointer-Exception. Weiter schlimm ist das erstmal nicht, sobald ich eine Zahl auswähle funktioniert alles ganz normal. Aber schön ist das ja trotzdem nicht. Wo kann ich denn verhindern dass bei anwählen der Box ein Event gestartet wird? Zur Not tuts zwar auch ein simpler try-catch-Block, aber das andere wäre wohl geschickter oder?

Grüße,
Ace

Ist ja auch richtig so. Welchen Sinn sollte eine ComboBox in einer Tabellenzelle sonst haben, außer dem TableModel mitzuteilen, der Anwender möchte was ändern?

Was heißt „dann … kein Wert ausgewählt“? Der Anwender wählt doch einen der fünf Werte in der ComboBox aus…

Du kannst doch einfach Abfragen, ob der Wert null ist, oder eine Vorbelegung mit einem Wert vornehmen.

@_Michael : Ich erhalte die Exception wenn ich die ComboBox ANwähle, d.h. sie klappt auf und ich hab die Liste mit den auszuwählenden Werten vor mir. Wenn ich dann was auswähle ist alles in Butter :wink:

@Crian : Ja das habe ich auch schon gemacht. Ich möchte aber eben gerne das Problem bei der Wurzel packen, dass die Exception gar nicht erst entsteht. Ist das in diesem Fall keine gute Idee?

Ich verseh es gerade nicht: Du bekommst eine NPE schon bei der Anwahl der Zelle zum Editieren? Und diese fliegt in der setValueAt Methode des TableModels? Das kann eigentlich nur sein, wenn Du vorher eine andere Zelle “leer” editiert hast und beim Wechsel in die neue Zelle versucht wird den ersten Wert ins Model zu übergeben.

Also die zugehörige Methode sieht wie folgt aus

public void setValueAt(Object aValue, int row, int col){
		//if(aValue!=null){
			int val = 0;
			double gval = 0;
			
			
			try{
                                                              //Werte auslesen
				val = (Integer) aValue;
				gval = 1.0/val;
			}catch(Exception e){
				e.printStackTrace();
				System.out.println("Das ist aber keine gültige Zahl!");
			}
			if(0 < val && val < 6){
				super.setValueAt(aValue, row, col);
				super.setValueAt(gval, col, row);
			}
		//}
	}

Ich habe auch ein wenig rumgespielt, das Problem ist wirklich dass beim anwählen der ComboBox der aValue=null ist, d.h. mit der NPE ist alles still.

Scheinbar kannst Du ja nicht ausschließen, dass null übergeben wird. Ist die Übergabe denn falsch? Können tatsächlich nur Integer übergeben werden?
Also warum die Werte nicht eingangs (auf null, ist Ganzzahl…) überprüfen?

Hallo TheAceOfSpades,

sicher bist du schon über dieses Beispiel gestolpert: http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableRenderDemoProject/src/components/TableRenderDemo.java

Was hast du im Vergleich zu diesem Beispiel anders gemacht?
Vielleicht einen eigenen CellEditor gebastelt?

MfG
hansmueller

Mach ich ja, am Anfang wirds ja jetzt abgefragt. Die Klammer hab ich nur hier reingemacht damit besser klar wird wo das Problem auftritt. Und da “aValue” ein Wert aus einer ComboBox mit Zahlen 1-5 ist bin ich mir ziemlich sicher dass auch Integer rauskommen :o).

Passt schon alles, es funktioniert ja, ich wollte einfach nur wissen ob/wie ich das zugehörige Event finde und ob es sinnvoll ist das zu blockieren.