CellEditor mit ComboBox richtig beenden

123456789

Aktives Mitglied
Hallo,

ich habe wieder einmal ein Problem mit einer JTable 🙁
Eine Spalte hat einen speziellen CellEditor, welcher eine JComboBox als Element zurück liefert.
Beim Doppelklick auf diese Zelle wird die JComboBox richtig angezeigt. Möchte ich aber (ohne zuvor ein Element aus der ComboBox zu wählen) eine andere Zelle bearbeiten, Dann sind drei Klicks dafür notwendig.
So viel ich herausgefunden habe passiert folgendendes:
  1. Klick: Popup menü der ComboBox wird eingeklappt.
  2. Klick: Focus geht auf die neu slektierte Zelle über.
  3. Klick: Popup menü der neu selektiertenZelle wird angezeigt.

Ich hätte gerene dass sich dieses Szenario mit nur einem Doppelklick realisieren lässt. Bei einer Zelle mit einer JLabel funktioniert dies ja auch so.
Hat jemand einen Vorschlag dafür?

Vielen Dank,
 
Wie sieht die Implementierung des CellEditors aus? Nutzt Du den DefaultCellEditor und übergibst diesem eine JComboBox?
Ich arbeite da eher mit dem AbstractCellEditor, der scheint da etwas anders zu reagieren.
 
Ja, ich verwende den DefaultCellEditor. Ich hab den Editor jetzt einmal ausgetauscht,

Java:
public abstract class CommonColumnEditor extends AbstractCellEditor implements TableCellEditor {

habe aber immer noch das selbe Verhalten.
 
Ein Sample zu posten wird leider schwierig, weil das nur eine Erweiterung von einem größerem Programm ist. Aber die Impl. ist:

1) Abstrakter CommonColEditor
2) Für jede Spalte eine SubKlasse.
3) In der Tabelle ist
Java:
public boolean editCellAt(int row, int column, EventObject e) {
implementiert.

Java:
public boolean editCellAt(int row, int column, EventObject e) {
			 
            if (e instanceof MouseEvent) {
                MouseEvent mouseEvent = (MouseEvent) e;
              
                int selRow = this.getSelectedRow();
                int clickCount = 1;
                if(selRow != row)
                	clickCount = 2;
                
                if (mouseEvent.getClickCount() > clickCount) {
                	return super.editCellAt(row, column, e);
                }
                return false;
            }
            else{
            	return super.editCellAt(row, column, e);
            }
        }
 

Neue Themen


Zurück
Oben