基本上,这就是我需要的:
我有一个JavaFX ComboBox,它被设置为可编辑。由于它是可编辑的,因此在那里有一个文本字段,有人可以输入字符串。我想使用以前生成的数据来填充那个小文本字段。我该如何做到这一点?
enterSchoolName.setSelectionModel((SingleSelectionModel<String>) FXCollections.observableArrayList(studentData.getSchoolName()));
这就是我对相关代码和解决方案“尝试”的所有方法。
答案 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
。
这是通过执行TextField
或comboBox.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();
}
}
中的文字,则ComboBox
和ComboBox#valueProperty()
都会发生变化。但正如您可以看到在ComboBox#getEditor#textProperty()
中输入内容时,只有textProperty会更改。
因此,在设置ComboBox
的文本时,请使用您想要的任何方法,但要在检索该文本时注意区别。