Das „kleine Textfeld“ in einer editierbaren ComboBox
als editor
der ComboBox
bekannt. Und es ist ein normales TextField
Objekt. Um auf dieses Objekt zuzugreifen, müssen Sie die Methode ComboBox#getEditor()
verwenden. Auf diese Weise können Sie die Methoden der Klasse TextField
verwenden. Wenn ich Sie richtig verstehe, wollen Sie nur den Text TextField
setzen.
Dies geschieht, indem comboBox.getEditor().setText(text)
oder comboBox.setValue(text)
getan wird. Beide Methoden legen den Text der ComboBox fest.
Aber es gibt einen Unterschied, wenn Sie diesen Text abrufen möchten. ComboBox#getValue()
ComboBox#getEditor()#getText()
gibt nicht unbedingt den gleichen Wert zurück.
Betrachten Sie das folgende Beispiel:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TestComboBox extends Application {
@Override
public void start(Stage stage) {
ComboBox<String> comboBox = new ComboBox<String>();
comboBox.setEditable(true);
comboBox.setValue("Test");
comboBox.getItems().addAll("Test", "Test2", "Test3");
VBox content = new VBox(5);
content.getChildren().add(comboBox);
content.setPadding(new Insets(10));
GridPane valueGrid = new GridPane();
Label cbValue = new Label();
cbValue.textProperty().bind(comboBox.valueProperty());
Label cbText = new Label();
cbText.textProperty().bind(comboBox.getEditor().textProperty());
valueGrid.add(new Label("ComboBox value: "), 0, 0);
valueGrid.add(new Label("ComboBox text: "), 0, 1);
valueGrid.add(cbValue, 1, 0);
valueGrid.add(cbText, 1, 1);
content.getChildren().add(valueGrid);
stage.setScene(new Scene(content));
stage.show();
}
public static void main(String[] args) {
launch();
}
}
Wenn Sie den Text in den ComboBox
von chosing eine Alternative in der Liste zu ändern, beide ComboBox#valueProperty()
und ComboBox#getEditor#textProperty()
Änderungen. Aber wie Sie sehen können, wenn Sie etwas in die ComboBox
eingeben, ändert sich nur die textProperty.
Verwenden Sie also die gewünschte Methode, wenn Sie den Text der ComboBox
festlegen, aber beachten Sie den Unterschied, wenn Sie diesen Text abrufen möchten.