Javafx 如何根据多个字段中的值生成消息?

Javafx 如何根据多个字段中的值生成消息?,javafx,combobox,textfield,Javafx,Combobox,Textfield,我正在使用JavaFX构建一个应用程序。我试图做的是根据用户输入值生成一条消息。因此,每行有一个文本字段、一个组合框和一个复选框,并且有许多行如下所示 假设我将根据用户值生成三条不同的消息。所以我需要检查这些字段是否为空,并检查每个字段的值以生成特定的消息。检查字段对于上面这样的三行是可以的。但我有10个字段。所以我必须检查每一条消息并生成或附加我自己的消息。此外,如果用户选中该复选框,则需要对所有选中的行值进行分组。所以我想问的是,有没有什么好的方法(最佳实践)来实现我所需要的,还是一个简单

我正在使用JavaFX构建一个应用程序。我试图做的是根据用户输入值生成一条消息。因此,每行有一个文本字段、一个组合框和一个复选框,并且有许多行如下所示

假设我将根据用户值生成三条不同的消息。所以我需要检查这些字段是否为空,并检查每个字段的值以生成特定的消息。检查字段对于上面这样的三行是可以的。但我有10个字段。所以我必须检查每一条消息并生成或附加我自己的消息。此外,如果用户选中该复选框,则需要对所有选中的行值进行分组。所以我想问的是,有没有什么好的方法(最佳实践)来实现我所需要的,还是一个简单的方法?我试过使用
HashMap
ArrayList
。但这些都不适用于此


如果有人能帮我,我真的很感激。提前感谢。

我可能会推荐您自己创建的自定义节点,如下所示。本示例不应具有与应用程序相同的功能,而只是演示如何创建和使用自定义节点。在创建这个示例时,我记住了您的想法,它有您的textfield组合框和复选框,它们更易于管理。试一下,如果有任何问题,请告诉我

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();
        }
    }
}
public类主扩展应用程序{
@凌驾
公众假期开始(阶段){
VBox VBox=新的VBox();
vBox.setAlignment(位置中心);
ArrayList itemList=新的ArrayList(Arrays.asList(“狗”、“猫”、“土耳其”));
ArrayList hBoxRowArrayList=新的ArrayList();
对于(int i=0;i{
对于(HBoxRow HBoxRow:hBoxRowArrayList){
System.out.println(“hBoxRow.getTextFieldInput()=”+hBoxRow.getTextFieldInput());
}
});
vBox.getChildren().add(printTextfieldsButton);
舞台场景(新场景(vBox));
stage.show();
}
//下面是自定义节点
公共类HBoxRow{
HBox HBox=新的HBox();
ComboBox ComboBox=新建ComboBox();
TextField TextField=新的TextField();
复选框=新复选框();
公共HBoxRow(){
hBox.设置校准(位置中心);
textField.setPrefWidth(150);
comboBox.setPrefWidth(150);
复选框。设置操作(事件->{
textField.setDisable(!textField.isDisabled());
comboBox.setDisable(!comboBox.isDisabled());
});
hBox.getChildren().addAll(复选框、文本字段、组合框);
}
public void setComboBoxValues(ObservableList ObservableList){
comboBox.setItems(observableList);
}
公共HBox gethBox(){
返回hBox;
}
公共字符串getTextFieldInput(){
返回textField.getText();
}
}
}

非常感谢您的回答。我不能投票,因为我的名声不好。但我可以接受这个答案。您还可以告诉我如何识别每个HBoxRow或通过值吗?因为它将所有结果作为一个整体给出。有没有办法将它们分开?有很多方法可以做到这一点,因为我不确定你的程序看起来是什么样子如果你没有很多的话,你可以将它们创建为局部变量,或者你可以在HBoxRow中创建一个名为id的字段,你可以给它们每个一个id调用公共setId方法,或者在构造函数中设置它