javafx choicebox events

33,640

Solution 1

Add a ChangeListener to the ChoiceBox's selectionmodel and selectedIndexProperty:

final ChoiceBox<String> box = new ChoiceBox<String>();

    box.getItems().add("1");
    box.getItems().add("2");
    box.getItems().add("3");

    box.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
      @Override
      public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
        System.out.println(box.getItems().get((Integer) number2));
      }
    });

Solution 2

Sebastian explained well enough though, just incase if you have interest only on actual value selected on the choice box and doesn't much care about index, then you can just use selectedItemProperty instead of selectedIndexProperty.

Also ChangeListener is functional interface, you can use lambda here when you go with java 8. I just little bit modified Sebastian's example. The newValue is newly selected value.

ChoiceBox<String> box = new ChoiceBox<String>();
box.getItems().add("1");
box.getItems().add("2");
box.getItems().add("3");

box.getSelectionModel()
    .selectedItemProperty()
    .addListener( (ObservableValue<? extends String> observable, String oldValue, String newValue) -> System.out.println(newValue) );

Solution 3

I know this is an old question, but a simpler way of doing it is using ChoiceBox.setOnAction(EventHandler):

ChoiceBox<String> box = ...;
box.setOnAction(event -> {
    System.out.println(box.getValue());
});

or in FXML:

<ChoiceBox fx:id="id" onAction="#controllerMethod">
Share:
33,640
Jayesh_naik
Author by

Jayesh_naik

Updated on January 14, 2021

Comments

  • Jayesh_naik
    Jayesh_naik over 3 years

    i have one choicebox in javafx contains 3 items let A B and C so on change of selection of this item i want to perform certain task so how can i handle this events?

     final ChoiceBox cmbx=new ChoiceBox();
        try {
            while(rs.next())
             {
                cmbx.getItems().add(rs.getString(2));
    
              }
             } 
            catch (SQLException e) 
               {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
    

    im adding items to choicebox from database... now i want to know how to handle the events of choicebox in javafx

  • parsa2820
    parsa2820 almost 4 years
    This is not working for me on jdk 13.can not resolve method addListener(<lambda expression>)
  • Steve Park
    Steve Park almost 4 years
    Yes, it could be no longer valid, since that solution was provided when the JavaFX was included in JDK8. JavaFX is now a standalone project (openjfx.io) and removed from JDK release, so the API may be changed and no longer support lambda expression. Personally I feel sad if lambda is not supported anymore