如何根据多个字段的值生成消息?
How to Generate Message According to Values in Multiple Fields?
我正在使用 JavaFX 构建应用程序。我想要做的是根据用户输入值生成一条消息。所以每行有一个文本字段和一个组合框和一个复选框,并且有很多行如下所示。
假设我将根据用户值生成三种不同的消息。所以我需要检查这些字段是否为空,并检查每个字段的值以生成特定消息。像上面那样只检查三行的字段就可以了。但是我有 10 个字段。所以我必须检查每一个并生成或附加我自己的消息。而且,如果用户选中了复选框,则需要对所有选中的行值进行分组。那么我要问的是有没有什么好方法(最佳实践)来实现我的需要或者一个简单的方法呢?我试过 HashMap
和 ArrayList
。但是那些对此不起作用。
如果有人能帮助我,我将不胜感激。提前致谢。
我可能会推荐您自己创建的自定义节点,如下所示。此示例不应具有与您的应用程序相同的功能,而只是为了展示如何创建和使用自定义节点。在创建此示例时,我牢记了您的想法,它具有您的文本字段组合框和复选框,并且它们更易于管理。给它一个运行,如果您有任何问题,请告诉我
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();
}
}
}
我正在使用 JavaFX 构建应用程序。我想要做的是根据用户输入值生成一条消息。所以每行有一个文本字段和一个组合框和一个复选框,并且有很多行如下所示。
假设我将根据用户值生成三种不同的消息。所以我需要检查这些字段是否为空,并检查每个字段的值以生成特定消息。像上面那样只检查三行的字段就可以了。但是我有 10 个字段。所以我必须检查每一个并生成或附加我自己的消息。而且,如果用户选中了复选框,则需要对所有选中的行值进行分组。那么我要问的是有没有什么好方法(最佳实践)来实现我的需要或者一个简单的方法呢?我试过 HashMap
和 ArrayList
。但是那些对此不起作用。
如果有人能帮助我,我将不胜感激。提前致谢。
我可能会推荐您自己创建的自定义节点,如下所示。此示例不应具有与您的应用程序相同的功能,而只是为了展示如何创建和使用自定义节点。在创建此示例时,我牢记了您的想法,它具有您的文本字段组合框和复选框,并且它们更易于管理。给它一个运行,如果您有任何问题,请告诉我
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();
}
}
}