Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to populate a list values to a combobox in JavaFx

Tags:

javafx

I have a list of values which i want to populate in a combobox in javaFx. this is my combo.xml

 <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>

this is my main

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);
}
}

This is my xml file and the main class i want to show those values in the combobox.anyone please help

like image 470
lucifer Avatar asked Sep 28 '13 09:09

lucifer


2 Answers

When creating a combo box, you must instantiate the ComboBox class and define the items as an observable list, just like other UI controls such as ChoiceBox, ListView, and TableView sets the items within a constructor.

ObservableList<String> options = 
        FXCollections.observableArrayList(
            "Option 1",
            "Option 2",
            "Option 3"
        );
    final ComboBox comboBox = new ComboBox(options);
like image 139
Samer Avatar answered Sep 24 '22 01:09

Samer


You have to create one controller and assign it with your FXML Screen.

<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>

Then your main class will be,

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);
}
}

And Your controller will be,

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]");

}
}
like image 23
Shreyas Dave Avatar answered Sep 26 '22 01:09

Shreyas Dave