Как прослушать выбранное событие в окне выбора javafx - PullRequest
0 голосов
/ 10 мая 2019

Я использую scenebuilder, и у меня есть 3 коробки выбора. Второй блок выбора зависит от ввода первого блока выбора, а третий зависит от 2-го. Как мне этого добиться?

Я пробовал это

@FXML
private ChoiceBox  course;

course.getSelectionModel().selectedIndexProperty().addListener(
        (ObservableValue<? extends Number> ov,
             Number old_val, Number new_val) -> { 
                //some code here
            }
    );

Но это событие происходит только в том случае, если я переключаю значение, первый выбор не вызовет это событие, а это не то, что я хочу. Как мне этого добиться, заранее спасибо.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете сделать что-то подобное, когда каждый раз, когда выполняется действие, оно устанавливает значения следующего. Запишите .getItems().clear();, это будет гарантировать, что список будет очищаться каждый раз, чтобы у вас не было старых значений в списке. Цикл for, однако, не важен только для добавления разнообразия к текстовым значениям, которые я добавил

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        ChoiceBox<String> choiceBoxOne = new ChoiceBox<>();
        choiceBoxOne.setPrefWidth(100);
        choiceBoxOne.getItems().addAll("Choice1", "Choice2", "Choice3");

        ChoiceBox<String> choiceBoxTwo = new ChoiceBox<>();
        choiceBoxTwo.setPrefWidth(100);

        ChoiceBox<String> choiceBoxThree = new ChoiceBox<>();
        choiceBoxThree.setPrefWidth(100);

        choiceBoxOne.setOnAction(event -> {
            choiceBoxTwo.getItems().clear();
            //The above line is important otherwise everytime there is an action it will just keep adding more
            if(choiceBoxOne.getValue()!=null) {//This cannot be null but I added because idk what yours will look like
                for (int i = 3; i < 6; i++) {
                    choiceBoxTwo.getItems().add(choiceBoxOne.getValue() + i);
                }
            }
        });

        choiceBoxTwo.setOnAction(event -> {
            choiceBoxThree.getItems().clear();
            //The above line is important otherwise everytime there is an action it will just keep adding more
            if(choiceBoxTwo.getValue()!=null) {//This can be null if ChoiceBoxOne is changed
                for (int i = 6; i < 9; i++) {
                    choiceBoxThree.getItems().add(choiceBoxTwo.getValue() + i);
                }
            }
        });


        VBox vBox = new VBox();
        vBox.setPrefSize(300, 300);
        vBox.setAlignment(Pos.TOP_CENTER);
        vBox.getChildren().addAll(choiceBoxOne, choiceBoxTwo, choiceBoxThree);

        primaryStage.setScene(new Scene(vBox));
        primaryStage.show();
    }

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