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?
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…
@_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
@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.
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?
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.