「小文本字段」是被稱爲ComboBox
的editor
。這是一個正常的TextField
對象。要訪問該對象,您需要使用方法ComboBox#getEditor()
。這樣你可以使用TextField
類的方法。如果我正確理解你,你想要做的就是設置TextField
的文字。
這是通過做comboBox.getEditor().setText(text)
或comboBox.setValue(text)
完成的。這兩種方法都會設置ComboBox的文本。
但是,當您想要獲取文本時有區別。 ComboBox#getValue()
ComboBox#getEditor()#getText()
不一定返回相同的值。
請看下面的例子:
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();
}
}
如果您在列表中艇員選拔的替代,兩者ComboBox#valueProperty()
和ComboBox#getEditor#textProperty()
的變化而變化的ComboBox
文本。但正如你所看到的,如果你在ComboBox
中輸入了某些東西,只有textProperty發生變化。
因此,當您設置ComboBox
的文本時,請使用所需的任何一種方法,但在檢索該文本時請注意不同之處。