2016-04-21 47 views
0

基本上,這裏是我需要的:如何以編程方式在JavaFX組合框中設置字符串值

我有一個JavaFX組合框,它被設置爲可編輯。由於它是可編輯的,因此在那裏有一個可以輸入字符串的文本字段。我想使用以前生成的數據來填充這個小文本字段。我該如何做到這一點?

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

這就是我在相關代碼和「嘗試」的解決方案。

回答

5

您可以設置在構造一個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

comboBox.setValue("textXXX"); 
1

「小文本字段」是被稱爲ComboBoxeditor。這是一個正常的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的文本時,請使用所需的任何一種方法,但在檢索該文本時請注意不同之處。

相關問題