[英]How to programmatically set a string value in a JavaFX ComboBox
基本上,這就是我需要的:
我有一個JavaFX ComboBox,它被設置為可編輯。 由於它是可編輯的,因此在那里有一個文本字段,有人可以輸入字符串。 我想使用以前生成的數據來填充那個小文本字段。 我該如何做到這一點?
enterSchoolName.setSelectionModel((SingleSelectionModel<String>) FXCollections.observableArrayList(studentData.getSchoolName()));
這就是我對相關代碼和解決方案“嘗試”的所有方法。
您可以在構造函數中設置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");
在一個可編輯的“小文本字段” ComboBox
被稱為editor
中的ComboBox
。 它是一個普通的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
的文本時,請使用您想要的任何方法,但要在檢索該文本時注意區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.