Как настроить многоуровневую форму выпадающего списка, которая динамически заполняется? - PullRequest
1 голос
/ 02 июля 2019

Это мой первый вопрос StackOverflow. Я нахожусь на стажировке и нахожусь на некотором блокпосту.

Я хочу реализовать нечто похожее на выпадающие списки в формах, которые запрашивают у вас страну и штат, и после выбора страны в меню штатов автоматически заполняются штаты в указанной стране.

У меня есть данные о зданиях, этажах в этих зданиях и пространствах на этих этажах. Я хочу настроить многоуровневый раскрывающийся список, чтобы кто-то, использующий разрабатываемую форму JavaFX, мог просто выбрать здание из первого меню, что позволило бы ему выбрать этаж из этого здания во втором раскрывающемся списке, и это позволило бы ему выбрать точный офис или помещение внутри этого здания на этом этаже.

Я просто хочу, чтобы второе и третье раскрывающиеся списки были правильно заполнены на основе первого и второго вариантов.

Моя первоначальная мысль состояла в том, чтобы иметь несколько слоев таблиц, где записи в рабочей таблице имеют отношение к подтаблице. Я не знаю, возможно ли это вообще. Я хотел бы получить руководство.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 июля 2019

Вот краткий пример в 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 голос
/ 02 июля 2019

Я бы просто имел три ChoiceBox .Первый может быть заполнен статически, тогда как второй и третий будут изначально скрыты (не видны).

При событии выбора первого, , вы заполняете второй, получаявыделенный элемент в первом и вы установите его видимым.То же самое для третьего, в событии выбора второго.

Подсказка: установите ObservableList в качестве элементов второго и третьего ChoiceBox, поэтому вам просто нужно изменить элементы в списке, когда вы получитеновый выбор.

Последний совет: не забудьте снова скрыть третий блок, когда первый ChoiceBox изменит выбор!

0 голосов
/ 02 июля 2019

Я не уверен, что вам нужно использовать 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");

Это добавляет опции к выпадающему. В качестве напоминания вы также должны добавить выпадающий список на панель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...