Yaser Eisa
Yaser Eisa

Reputation: 17

JavaFx choicebox event handler method doesnt change variable?

I'm new at javafx but I'm writing an app and I want my "to" value to change depending on which option is chosen in the choicebox but my current code always keeps it at 0..help? I want to be able to change the to depending on state

      public void start(Stage primaryStage) {
     double to=0;
       primaryStage.setTitle("ShCal");
     GridPane pane = new GridPane();
   ` pane.setAlignment(Pos.CENTER);
     pane.setHgap(10);
     pane.setVgap(10);
     pane.setPadding(new Insets(25, 25, 25, 25));
     Scene scene = new Scene(pane, 300, 275);

     //button
     Button button=new Button("to");
     pane.add(button, 0, 3);

     //Pick state
     Label State=new Label("State");
     pane.add(State,0,0);
     //choicebox
     ChoiceBox<String> choicesBox=new ChoiceBox<>();
     choicesBox.getItems().addAll("NJ","NY");
     pane.add(choicesBox,1,0);
     //set default
     choicesBox.setValue(null);

     button.setOnAction(e->getChoice(choicesBox,to));




    primaryStage.setScene(scene);
    primaryStage.show();

    }

    private double getChoice(ChoiceBox<String> choicesBox, double tx) {
          String state=choicesBox.getValue();
          System.out.print(tx);
          if(state=="NJ")
          {
             tx=10/100;
         }
           System.out.print(state);
         return tx;
         }


   public static void main(String[] args) {
        launch(args);
     }
    }

Upvotes: 0

Views: 538

Answers (1)

hotzst
hotzst

Reputation: 7506

That is because your to value is of the primitive type double, defined in the scope of your start method. The method getChoice returns the new value, but you are not updating it. Here are two approaches that you can try: Define to as member:

private double to = 0;
private double getChoice(ChoiceBox<String> choicesBox) {
  String state=choicesBox.getValue();
  if(state=="NJ") {
    tx=10/100;
  }
}

However I personally would prefer a solution that is more inline with JavaFX: Define the to variable as member property:

private DoubleProperty to = new SimpleDoubleProperty(0);
private double getChoice(ChoiceBox<String> choicesBox) {
  String state=choicesBox.getValue();
  if(state=="NJ") {
    tx.setValue(10/100);
  }
}

Doing it this way you can then for example have a label displaying the value without the hassle of requiring to update it on each change:

Label lbl = new Label();
lbl.textProperty().bind(to.asString());

Upvotes: 1

Related Questions