Hallo zusammen,
ich habe eine JTable, und für eine Spalte eine JComboBox definiert. Auf die Table habe ich einen MouseListener gelegt, um festzustellen, welche Reihe gerade ausgewählt ist (die Variable aktRow_ wird gesetzt), und auch für mein Popup Menü. Auf die CBox habe ich einen ItemListener gelegt, um auf Änderungen zu reagieren.
Vom Standpunkt eines Progi-Anwenders sollte es so sein:
Ich klicke in die CBox, wähle einen neuen Wert aus. Wenn sich die CBox schliesst dann sollte der ItemListener() reagieren. Dort wird dann ein TimerTask gestartet.
Momentan ist es aber so:
1.) Ich klicke in die CBox in einer Tabellezeile. Der ItemListener() wird aufgerufen und dann die getTableCellEditorComponent() Methode (hier wird meine Variable aktRow_ aktualisiert). Ich wähle einen neuen Wert aus, und der ItemListener() wird schon wieder aufgerufen.
2.) Ich wähle jetzt eine CBox einer anderen Zeile. Der ItemListener() wird aufgerufen. Nun hat meine Variable aktRow_ aber den Wert von vorhin (siehe 1. ), und nicht den Wert der gewählten CBox. Die getTableCellEditorComponent() Methode wird aufgerufen und erst jetzt ist meine aktRow_ wieder richtig, doch jetzt ist es zu spät.
Irgendwie ist hier das Verhalten der Listener in einer Tabelle mit CBox merkwürdig. Meine variable aktRow_ hinkt immer einen Schritt hinterher und ist nie aktuell, ausser man klickt zuerst in eine andere Tabellenzelle und dann in die CBox. Dann ist alles OK, weil ja der MouseListener durchlaufen wird (hier wird auch die variable aktRow_ aktualisiert).
Nur das entspricht nicht einer userfriendly Bedienung.
Ich brauche im ItemListener() die aktuelle Reihe der angewählten CBox, aber wie kann ich das realiseren? Hat jemand interesse mein i mal zu Testen, dann kann man den Effekt besser nachvollziehen.
ich habe eine JTable, und für eine Spalte eine JComboBox definiert. Auf die Table habe ich einen MouseListener gelegt, um festzustellen, welche Reihe gerade ausgewählt ist (die Variable aktRow_ wird gesetzt), und auch für mein Popup Menü. Auf die CBox habe ich einen ItemListener gelegt, um auf Änderungen zu reagieren.
Vom Standpunkt eines Progi-Anwenders sollte es so sein:
Ich klicke in die CBox, wähle einen neuen Wert aus. Wenn sich die CBox schliesst dann sollte der ItemListener() reagieren. Dort wird dann ein TimerTask gestartet.
Momentan ist es aber so:
1.) Ich klicke in die CBox in einer Tabellezeile. Der ItemListener() wird aufgerufen und dann die getTableCellEditorComponent() Methode (hier wird meine Variable aktRow_ aktualisiert). Ich wähle einen neuen Wert aus, und der ItemListener() wird schon wieder aufgerufen.
2.) Ich wähle jetzt eine CBox einer anderen Zeile. Der ItemListener() wird aufgerufen. Nun hat meine Variable aktRow_ aber den Wert von vorhin (siehe 1. ), und nicht den Wert der gewählten CBox. Die getTableCellEditorComponent() Methode wird aufgerufen und erst jetzt ist meine aktRow_ wieder richtig, doch jetzt ist es zu spät.
Irgendwie ist hier das Verhalten der Listener in einer Tabelle mit CBox merkwürdig. Meine variable aktRow_ hinkt immer einen Schritt hinterher und ist nie aktuell, ausser man klickt zuerst in eine andere Tabellenzelle und dann in die CBox. Dann ist alles OK, weil ja der MouseListener durchlaufen wird (hier wird auch die variable aktRow_ aktualisiert).
Nur das entspricht nicht einer userfriendly Bedienung.
Ich brauche im ItemListener() die aktuelle Reihe der angewählten CBox, aber wie kann ich das realiseren? Hat jemand interesse mein i mal zu Testen, dann kann man den Effekt besser nachvollziehen.