JavaFx中的链接组合框

问题描述 投票:0回答:1

我有一个带有三个组合框的界面。每个组合框都显示对象的属性,并根据情况按字母顺序或数字顺序排序。当我从组合框中选择一个项目(属性)时,其他两个应选择与该对象相对应的项目(属性)。

我找不到有关它的文档,也没有关于如何执行操作的任何线索。我只找到有关嵌套组合框的信息,但事实并非如此。

希望您能理解。

javafx combobox binding fxml
1个回答
0
投票

在此示例中,我已向一个组合框添加了一个侦听器。在该组合框中选择一个值后,第二个组合框将进行自我调整以具有相应的值。您可以采用相同的逻辑并将其应用于3种方式。如果您有任何疑问,请告诉我!

 package example;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

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

    // Start the javafx application
    @Override
    public void start(Stage stage) {
        ComboBox<String> combo = new ComboBox<String>();
        combo.getItems().add("1");
        combo.getItems().add("2");
        combo.getItems().add("3");
        combo.getSelectionModel().select(0); // value index to select

        ComboBox<String> combo2 = new ComboBox<String>();
        combo2.getItems().add("10");
        combo2.getItems().add("20");
        combo2.getItems().add("30");
        combo2.getSelectionModel().select(0); // value index to select

        combo.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue ov, String oldVal, String newVal) {
                if (newVal.equals("1"))
                    if (combo2.getSelectionModel().getSelectedIndex() != 0)
                        combo2.getSelectionModel().select(0); // value index to select
                if (newVal.equals("2"))
                    if (combo2.getSelectionModel().getSelectedIndex() != 1)
                    combo2.getSelectionModel().select(1);
                if (newVal.equals("3"))
                    if (combo2.getSelectionModel().getSelectedIndex() != 2)
                    combo2.getSelectionModel().select(2);
            }
        });
        VBox wall = new VBox(5);
        wall.getChildren().addAll(combo, combo2);
        Scene scene = new Scene(wall, 200, 200);
        stage.setScene(scene);
        stage.show();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.