Как создать сообщение в соответствии со значениями в нескольких полях? - PullRequest
0 голосов
/ 24 октября 2019

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

enter image description here

Давайтескажем, я сгенерирую три разных сообщения в соответствии с пользовательскими значениями. Поэтому мне нужно проверить, являются ли эти поля пустыми или нет, и проверить значение каждого поля, чтобы сгенерировать конкретное сообщение. Проверка полей в порядке только для трех строк, как указано выше. Но у меня есть 10 полей. Поэтому я должен проверить каждый и сгенерировать или добавить свое собственное сообщение. А также, если пользователь установил флажок, необходимо сгруппировать все проверенные значения строк. Так что я спрашиваю, есть ли хороший способ (лучшая практика) для достижения того, что мне нужно, или легкий способ? Я пробовал с HashMap и ArrayList. Но они не работают для этого.

Очень ценю, если кто-нибудь сможет мне помочь. Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2019

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

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        VBox vBox = new VBox();
        vBox.setAlignment(Pos.CENTER);

        ArrayList<String> itemList = new ArrayList<>(Arrays.asList("Dog", "Cat", "Turkey"));

        ArrayList<HBoxRow> hBoxRowArrayList = new ArrayList<>();
        for (int i = 0; i<3; i++) {
            HBoxRow hBoxRow = new HBoxRow();
            hBoxRow.setComboBoxValues(FXCollections.observableList(itemList));
            hBoxRowArrayList.add(hBoxRow);
            vBox.getChildren().add(hBoxRow.gethBox());
        }

        Button printTextfieldsButton = new Button("Print Textfields");
        printTextfieldsButton.setOnAction(event -> {
            for (HBoxRow hBoxRow : hBoxRowArrayList) {
                System.out.println("hBoxRow.getTextFieldInput() = " + hBoxRow.getTextFieldInput());
            }
        });
        vBox.getChildren().add(printTextfieldsButton);

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

    //Below is the custom Node
    public class HBoxRow {
        HBox hBox = new HBox();
        ComboBox<String> comboBox = new ComboBox<>();
        TextField textField = new TextField();
        CheckBox checkBox = new CheckBox();

        public HBoxRow(){
            hBox.setAlignment(Pos.CENTER);

            textField.setPrefWidth(150);

            comboBox.setPrefWidth(150);

            checkBox.setOnAction(event -> {
                textField.setDisable(!textField.isDisabled());
                comboBox.setDisable(!comboBox.isDisabled());
            });

            hBox.getChildren().addAll(checkBox, textField, comboBox);
        }

        public void setComboBoxValues(ObservableList observableList) {
            comboBox.setItems(observableList);
        }

        public HBox gethBox(){
            return hBox;
        }

        public String getTextFieldInput(){
            return textField.getText();
        }
    }
}
...