【问题标题】:How to set up a multilevel dropdown box form that is dynamically populated?如何设置动态填充的多级下拉框表单?
【发布时间】:2019-07-02 13:12:01
【问题描述】:

这是我的第一个 StackOverflow 问题。我正在实习,但遇到了一些障碍。

我想在表单中实现类似于下拉框的功能,要求您输入国家和州,选择国家后,州菜单会自动填充该国家/地区的州。

我有建筑物、这些建筑物中的楼层以及这些楼层中的空间的数据。我想设置一个多层下拉框,以便使用我正在开发的 JavaFX 表单的人可以从第一个菜单中选择一个建筑物,然后他可以在第二个下拉框中从该建筑物中选择楼层,并且这将允许他在该楼层选择该建筑物内的确切办公室或空间。

我只想根据第一个和第二个选择正确填充第二个和第三个下拉框。

我最初的想法是有多个表层,其中构建表中的条目与子表有关系。我不知道这是否可能。我需要一些指导。

谢谢。

【问题讨论】:

  • 欢迎来到 StackOverflow!我投票结束这个过于广泛。 StackOverflow 旨在解决特定的编程问题,而不是获得有关如何实现整个功能的想法。但是,您需要研究的是如何在您的第一个 ComboBox 上使用 ChangeListener。当该选择更改时,您可以填充以下ComboBoxes。 SO上有几个答案可以引导您朝着正确的方向前进。
  • 研究该方法后,如果您仍然遇到问题,请继续阅读How to Ask 文章并发布问题,包括minimal reproducible example

标签: java sql sqlite javafx


【解决方案1】:

这是 JavaFX 中的一个快速示例,可让您开始让它们在第一个框的操作中动态更改第二个框的设置值,依此类推,无论您需要多少组合框

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        ComboBox comboBox2 = new ComboBox();

        ComboBox comboBox = new ComboBox();
        comboBox.getItems().addAll("Country 1", "Country 2", "Country 3");
        comboBox.setOnAction(event -> {
            comboBox2.getItems().clear();
            for (int i = 0; i < 5; i++) {
                comboBox2.getItems().add("State "+i+" "+comboBox.getValue().toString());
            }
        });


        VBox vBox = new VBox();
        vBox.getChildren().addAll(comboBox, comboBox2);

        Scene scene = new Scene(vBox);
        stage = new Stage();
        stage.setScene(scene);
        stage.show();
    }

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

}

【讨论】:

    【解决方案2】:

    我只需要三个 ChoiceBox。第一个可能是静态填充的,而第二个和第三个最初是隐藏的(不可见)。

    At the selection event of the first one, 您通过在第一个元素中获取选定元素来填充第二个元素,并将其设置为可见。第三个也是一样,在第二个的选择事件中。

    提示:将ObservableList设置为第二个和第三个ChoiceBox的item,这样当你得到一个新的选择时,你只需要改变列表中的元素即可。

    最后提示:当第一个 ChoiceBox 更改选择时,记得再次隐藏第三个框!

    【讨论】:

      【解决方案3】:

      我不确定您是否需要使用 SQL,但如果您想从 SQL 表中读取数据,这可能是一种选择。如果您想在选项中硬编码并使用 if 语句逻辑使以下下拉列表出现在选择上一个下拉列表之后,这是一种可能的解决方案。

      我为一个项目做了类似的事情。以下是我创建下拉菜单的步骤: 首先,创建一个可观察的列表:

      import javafx.collections.*;
      #i should say wildcard imports are not optimal and you should find out what specific import you need but I am not sure so I used the wildcard.
      import java.util.ArrayList;
      #I am not sure what imports you have already, but you made need more
      ObservableList varName = FXCollections.observableArrayList();
         ComboBox<String> varName2 = new ComboBox<>(varName);
      

      您应该在班级级别执行此操作以避免任何范围问题。第二步是将数据添加到下拉菜单中。您可以使用 .add() 方法完成此操作

      varName.add("option 1");
      varName.add("option 2");
      

      这会将选项添加到下拉列表中。提醒一下,您还必须将下拉菜单添加到窗格中。

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 2020-11-12
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多