如何以编程方式在 JavaFX ComboBox 中设置字符串值
Posted
技术标签:
【中文标题】如何以编程方式在 JavaFX ComboBox 中设置字符串值【英文标题】:How to programmatically set a string value in a JavaFX ComboBox 【发布时间】:2016-08-14 00:27:36 【问题描述】:基本上,这就是我需要的:
我有一个 JavaFX 组合框,它被设置为可编辑。由于它是可编辑的,因此那里有一个小文本字段,有人可以在其中输入字符串。我想使用以前生成的数据来填充那个小文本字段。我该如何做到这一点?
enterSchoolName.setSelectionModel((SingleSelectionModel<String>) FXCollections.observableArrayList(studentData.getSchoolName()));
这就是我所拥有的相关代码和解决方案的“尝试”。
【问题讨论】:
【参考方案1】:可以在构造函数中设置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");
【讨论】:
【参考方案2】:可编辑的ComboBox
中的“小文本字段”称为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
中的文本,ComboBox#valueProperty()
和ComboBox#getEditor#textProperty()
都会发生变化。但正如您所看到的,如果您在 ComboBox
中输入内容,则只有 textProperty 会发生变化。
因此,当您设置ComboBox
的文本时,请使用您想要的任何方法,但要注意检索该文本时的区别。
【讨论】:
以上是关于如何以编程方式在 JavaFX ComboBox 中设置字符串值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?
如何修复 javafx 中的渲染错误(ComboBox、ListView)
如何以编程方式用户根据 JavaFX 中的字符串值定义列表视图的颜色