如何以编程方式在JavaFX ComboBox中设置字符串值

时间:2016-04-21 03:02:22

标签: java javafx combobox

基本上,这就是我需要的:

我有一个JavaFX ComboBox,它被设置为可编辑。由于它是可编辑的,因此在那里有一个文本字段,有人可以输入字符串。我想使用以前生成的数据来填充那个小文本字段。我该如何做到这一点?

    enterSchoolName.setSelectionModel((SingleSelectionModel<String>) FXCollections.observableArrayList(studentData.getSchoolName()));

这就是我对相关代码和解决方案“尝试”的所有方法。

2 个答案:

答案 0 :(得分:9)

您可以在构造函数中设置ComboBox的数据项:

 ObservableList<String> data = FXCollections.observableArrayList("text1", "text2", "text3");
 ComboBox<String> comboBox = new ComboBox<>(data);

或更晚:

comboBox.setItems(data);

要选择数据项,您可以在SelectionModel或项目本身中选择适当的索引:

comboBox.getSelectionModel().select(0);
comboBox.getSelectionModel().select("text1");

还可以为组合框编辑器设置一个值,该编辑器不包含在基础数据模型中:

comboBox.setValue("textXXX");

答案 1 :(得分:1)

可编辑ComboBox中的“小文字字段”称为editor的{​​{1}}。这是一个普通的ComboBox对象。要访问该对象,您需要使用方法TextField。这样您就可以使用ComboBox#getEditor()类的方法。如果我理解正确,您只想设置TextField

的文本

这是通过执行TextFieldcomboBox.getEditor().setText(text)来完成的。这两种方法都将设置ComboBox的文本。

但是当您想要获取该文本时会有所不同。 comboBox.setValue(text) 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(); } } 中的文字,则ComboBoxComboBox#valueProperty()都会发生变化。但正如您可以看到在ComboBox#getEditor#textProperty()中输入内容时,只有textProperty会更改。

因此,在设置ComboBox的文本时,请使用您想要的任何方法,但要在检索该文本时注意区别。