Hallo,
ist es möglich die Editorkomponente einer Combobox zur Laufzeit zu tauschen? Soll heissen, wenn eine Editierbare Combobox den Focus enrhällt soll eine andere Komponente als Editorkomponente verwendet werden als im nicht fokusierten zustand.
Folgenden Ansatz habe ich vergeblich versucht umzusetzen:
Ich habe eine Klasse welche ComboboxEditor implementiert (MyComboBoxEditor). in dieser klasse sind zwei Klassenvariablen. Ein Label und ein textfeld. Ausserdem habe ich die Klasse MyComboBoxEditor um ein zustandsflag focused erweitert. Zu testzwecken wird dieses Flag noch von "aussen" gesetzt. Die methode getEditorComponent() gibt je nach Zustand entweder das Label oder das textfeld zurück. Dargestellt wird allerdings immer nur die zuerst zurückgegebene Komponente.
Obwohl durch ändern der Rückgabewert der Methode get Methode getEditorComponent verändert wird, ändert sich die Komponente nicht. Als komponente wird das verwendet, was beim ersten Aufruf der Methode zurückgegeben wurde.
ich hoffe ich konnte mein Problem verständlich erleutern.
Vielen Dank für eure Hilfe
Harri E.
ist es möglich die Editorkomponente einer Combobox zur Laufzeit zu tauschen? Soll heissen, wenn eine Editierbare Combobox den Focus enrhällt soll eine andere Komponente als Editorkomponente verwendet werden als im nicht fokusierten zustand.
Folgenden Ansatz habe ich vergeblich versucht umzusetzen:
Ich habe eine Klasse welche ComboboxEditor implementiert (MyComboBoxEditor). in dieser klasse sind zwei Klassenvariablen. Ein Label und ein textfeld. Ausserdem habe ich die Klasse MyComboBoxEditor um ein zustandsflag focused erweitert. Zu testzwecken wird dieses Flag noch von "aussen" gesetzt. Die methode getEditorComponent() gibt je nach Zustand entweder das Label oder das textfeld zurück. Dargestellt wird allerdings immer nur die zuerst zurückgegebene Komponente.
Code:
class MyComboBoxEditor implements ComboBoxEditor{private DefaultNumericEntryField numericField = new DefaultNumericEntryField();
private JLabel aLabel = new JLabel();
boolean focused = false;
public void setFocused(boolean focused){this.focused = focused;
}
public boolean isFocused(){return this.focused;}
public Component getEditorComponent() {
Component theComponent =
this.focused?this.numericField:this.aLabel;
System.out.println("Focusflag set? "+this.isFocused()+" EditorComponent = "+theComponent.getClass());return theComponent;}
public Object getItem() {return null;
}
public void selectAll() {}
public void setItem(Object anObject) {
this.setComponentsText(anObject.toString());}
private void setComponentsText(String aText){this.aLabel.setText("Label");
this.numericField.setText("0");
}
public void addActionListener(ActionListener l) {}
public void removeActionListener(ActionListener l) {}
}
Obwohl durch ändern der Rückgabewert der Methode get Methode getEditorComponent verändert wird, ändert sich die Komponente nicht. Als komponente wird das verwendet, was beim ersten Aufruf der Methode zurückgegeben wurde.
ich hoffe ich konnte mein Problem verständlich erleutern.
Vielen Dank für eure Hilfe
Harri E.