2013-09-28 79 views
7

我有一個值列表,我想在javaFx的組合框中填充值。這是我的combo.xml如何在JavaFx中將列表值填充到組合框

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="- Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"> 
<children> 
<ComboBox id="comboId" layoutX="210.0" layoutY="108.0" prefHeight="27.0" prefWidth="102.0" promptText="Select"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
     <String fx:value="Item 1" /> 
     <String fx:value="Item 2" /> 
     <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
    </Com boBox> 
    </children> 
    </AnchorPane> 

這是我的主要

public class JavaFXExperiment extends Application { 
@Override 
public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("combo.fxml")); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    final ComboBox comboId = new ComboBox(); 
    comboId.getItems().addAll(
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]"); 
} 
    public static void main(String[] args) { 
    launch(args); 
} 
} 

這是我的XML文件和主類我想顯示在combobox.anyone這些值,請幫助

回答

18

您必須創建一個控制器並將其與您的FXML屏幕一起分配。

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="- Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" fx:controller="MyController" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"> 
<children> 
<ComboBox fx:id="myCombobox" id="comboId" layoutX="210.0" layoutY="108.0" prefHeight="27.0" prefWidth="102.0" promptText="Select"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
     <String fx:value="Item 1" /> 
     <String fx:value="Item 2" /> 
     <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
    </ComboBox> 
    </children> 
    </AnchorPane> 

然後你的主類將是,

public class JavaFXExperiment extends Application { 
@Override 
public void start(Stage stage) throws Exception { 

    FXMLLoader loader = new FXMLLoader(getClass().getResource("combo.fxml")); 
    Parent root = loader.load(); 

    MyController myController = loader.getController(); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 

    //Set Data to FXML through controller 
    myController.setData(); 
} 
    public static void main(String[] args) { 
    launch(args); 
} 
} 

和你的控制器會,

public class MyController implements Initializable 
{ 

@FXML 
public Combobox myCombobox; 

@Override 
    public void initialize(URL url, ResourceBundle rb) { 
} 

public void setData(){ 

myCombobox.getItems().clear(); 

myCombobox.getItems().addAll(
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]"); 

} 
} 
+0

謝謝,這打開一個新窗口時也適用。 – lmiguelvargasf

+0

'@FXML public ComboBox myCombobox;' – saikosen