Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javafx choicebox events

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

like image 448
Jayesh_naik Avatar asked Jan 25 '13 13:01

Jayesh_naik


3 Answers

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">
like image 63
airsquared Avatar answered Nov 11 '22 22:11

airsquared


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));
      }
    });
like image 24
zhujik Avatar answered Nov 11 '22 20:11

zhujik


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) );
like image 32
Steve Park Avatar answered Nov 11 '22 22:11

Steve Park