【问题标题】:How to Generate Message According to Values in Multiple Fields?如何根据多个字段的值生成消息?
【发布时间】:2019-10-24 07:47:45
【问题描述】:

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

假设我将根据用户值生成三种不同的消息。所以我需要检查这些字段是否为空,并检查每个字段的值以生成特定的消息。检查字段只适用于上面的三行。但我有 10 个字段。所以我必须检查每一个并生成或附加我自己的消息。而且,如果用户选中复选框,则需要对所有选中的行值进行分组。那么我要问的是有什么好的方法(最佳实践)来实现我所需要的或者一个简单的方法吗?我试过HashMapArrayList。但这些都不起作用。

如果有人可以帮助我,我真的很感激。提前致谢。

【问题讨论】:

    标签: javafx combobox textfield


    【解决方案1】:

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

    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();
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的回答。由于我的声誉低,我不能投票。但我可以接受这个作为答案。您还可以告诉我如何识别每个 HBoxRow 或按值吗?因为它把所有的结果都作为一个。有没有办法把它们分开?
    • 有很多方法可以做到这一点,因为我不确定你的程序是什么样的,如果你没有很多,你可以将它们创建为局部变量,或者你可以创建一个HBoxRow 中的字段称为 id ,您可以为每个人提供一个调用公共 setId 方法的 id 或在构造函数中设置它
    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2013-07-13
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多