EditorDelegate

123456789

Aktives Mitglied
Hallo,

ich habe eine bestehende Tabelle mit einem custom CellEditor (MyEditor)



Java:
public class MyCellEditor extends DefaultCellEditor {

...

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

        editorComponent = getFormattedTextField();
		delegate = new EditorDelegate() {			
			private static final long serialVersionUID = 1L;

			public void setValue(Object value) {
				getFormattedTextField().setText((value != null) ? value.toString() : "");
		    }
			
			public Object getCellEditorValue() {
				return getFormattedTextField().getText();
			}
		};

        return super.getTableCellEditorComponent(table, value, isSelected, row, column);

}

}

Bei dieser Implementierung (vereinfachtes Bsp. ) wird der gewünschte CellEditorCompontent beim Doppelklick auf die TabellenZelle auch angezeigt. Jedoch tritt folgendes Verhalten auf:

1) Der Bestehende Inhalt des Texfeldes wird überschrieben (Als ob die Einfügen Taste gedrückt wäre)
2) Zum Abbrechen des Editiervorganges muss 2 mal die Esc Taste gedrückt werden.

Ich würde gerne den Überschreibe- Modus per default deaktivieren und das Editieren mit nur einmaligen Drücken der Esc Taste abbrechen.

Danke,
LG
 

123456789

Aktives Mitglied
Wenn ich anstatt der obigen Ableitung

Java:
public class MyCellEditor extends AbstractCellEditor implements TableCellEditor {

...

}

verwende und den EditorDelegate entferne, dann werden meine 2 Kriterien erfüllt.

So müsste ich aber die die Methode

Java:
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

...

}

komplett überarbeiten, was einiges an Aufwand bedeutet.

Wird dieses merkwürdige Verhalten durch den EditorDelegate hervorgerufen?

Danke,
LG
 

123456789

Aktives Mitglied
So, einen der beiden Nebeneffekte "Der Bestehende Inhalt des Texfeldes wird überschrieben (Als ob die Einfügen Taste gedrückt wäre)"
konnte ich beheben, indem ich die folgende Zeile löschte.

Java:
getDefaultMask().install(getFormattedTextField());

Das Problem mit dem zweimaligen Drücken der Esc Taste zum Abbrechen des Editiervorganges besteht weiterhin.

Ich hab da ein einfaches Beispielprojekt erstellt und dem Post angehängt, in welchem das Problem auch vorliegt. Vlt. kann jemand den Fehler finden.
Ich glaube dass durch die Klasse CustomCellEditor.java das Rroblem hervorgerufen wird.

Danke,
LG
 

123456789

Aktives Mitglied
Und solved :)

Man soll halt eben ein JFormattedTextField auch nur dann verwenden, wenn man es wirklich braucht.
In diesem Fall wird dieses nicht benötigt und so hab ich's durch ein JTextField ersetzt.
Jetzt funktionierts auch.

Doch warum muss man bei einem JFormattedTextField 2 mal die Esc Taste drücken damit das Editieren abgebrochen wird ?
 

KrokoDiehl

Top Contributor
Doch warum muss man bei einem JFormattedTextField 2 mal die Esc Taste drücken damit das Editieren abgebrochen wird ?

Ohne es ausprobiert zu haben rate ich folgendes: Das erste ESC wird vom FormattedTextField abgefangen um die Eingabe abzubrechen (d.h. zurücksetzen auf Startwert). Somit geht dieses ESC-Event nicht an die Tabelle sondern erst das zweite was dann eben zum Abbruch des Editierens führt.

Andere Frage: Lässt du wirklich bei jedem
Code:
getTableCellEditorComponent()
-Aufruf ein neues EditorDelegate-Objekt anlegen? Ist das nicht etwas unperformant? Da es ohnehin immer das gleiche ist, könntest du es als Attribut anlegen.
 

123456789

Aktives Mitglied
Danke für deine Antwort,

das klingt logisch. Und der EditorDelegate wird wirklich jedesmal neu Instanziiert, ich werds gleich ändern.

Danke,
LG
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben