如何设置动态填充的多级下拉框表单?

时间:2019-07-02 13:12:01

标签: java sql sqlite javafx

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

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

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

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

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

谢谢。

3 个答案:

答案 0 :(得分:2)

这是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); }

}

答案 1 :(得分:1)

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

At the selection event of the first one,,通过在第一个元素中获取所选元素来填充第二个元素,并将其设置为可见。在第二个选择事件中,与第三个相同。

提示:将ObservableList设置为第二个和第三个ChoiceBox的项,因此,当您获得新选择时,只需更改列表中的元素即可。

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

答案 2 :(得分:0)

我不确定您是否需要使用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");

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