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