如何检查所有地方是否为空?
How to check if all of places are empty?
我写了这个方法,因为我想在按下按钮时检查所有地方是否文本字段、日期选择器和单选按钮为空,但是它不起作用。
我应该在这段代码中更正什么,或者我应该以不同的方式做一个方法?
public void btn1(ActionEvent event) throws Exception {
if(name.getText().trim().isEmpty() && surname.getText().trim().isEmpty() && pesel.getText().trim().isEmpty() && adres.getText().trim().isEmpty() && email.getText().trim().isEmpty() )
if(dateOfBirth.getValue() == null)
if(sexM.isSelected() || sexF.isSelected() || sexG.isSelected()){
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
}
}
试试这个:
public void btn1(ActionEvent event) throws Exception {
if (name.getText().trim().length() == 0 && surname.getText().trim().length() == 0
&& pesel.getText().trim().length() == 0 && adres.getText().trim().length() == 0
&& email.getText().trim().length() == 0 && dateOfBirth.getValue() == null && sexM.isSelected()
|| sexF.isSelected() || sexG.isSelected()) {
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
将所有 isEmpty()
替换为 .length()
检查 TextField
时,您会注意到有很多重复代码。如果摆脱这个会更好。
此外,通过使用 3 if
s,您可能犯了一些错误:您允许既不显示新阶段也不将标签设置为错误消息的情况。
此外,性别部分看起来您使用的 CheckBox
es/RadioButton
s 是互斥的。在这种情况下,您应该使用 ToggleGroup
,它允许您使用类似于 DatePicker
:
使用的代码来检查选择
/**
* Helper method for checking, none of the TextFields passed are empty.
*/
private static boolean allFilled(TextField... textFields) {
for (TextField textField : textFields) {
if (textField.getText().trim().isEmpty()) {
return false;
}
}
return true;
}
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
if (allFilled(name, surname, pesel, adres, email)
&& dateOfBirth.getValue() != null
&& sexToggleGroup.getSelectedToggle() != null) {
... show new stage ...
} else {
... display error message ...
}
这是我的解决方案。也许这会对某人有所帮助。
@FXML
public void btn1(ActionEvent event) throws IOException {
TextField[] fieldList = new TextField[]{name, surname, pesel, adres, email};
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
boolean right = false;
for(TextField listF : fieldList)
if(listF.getText().equals("") || dateOfBirth.getEditor().getText().equals("") || sexToggleGroup.getSelectedToggle() == null){
lbl.setText("All of places have to be filled");
right = true;
break;
} else {
right = false;
}
if(right == false){
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
我写了这个方法,因为我想在按下按钮时检查所有地方是否文本字段、日期选择器和单选按钮为空,但是它不起作用。
我应该在这段代码中更正什么,或者我应该以不同的方式做一个方法?
public void btn1(ActionEvent event) throws Exception {
if(name.getText().trim().isEmpty() && surname.getText().trim().isEmpty() && pesel.getText().trim().isEmpty() && adres.getText().trim().isEmpty() && email.getText().trim().isEmpty() )
if(dateOfBirth.getValue() == null)
if(sexM.isSelected() || sexF.isSelected() || sexG.isSelected()){
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
}
}
试试这个:
public void btn1(ActionEvent event) throws Exception {
if (name.getText().trim().length() == 0 && surname.getText().trim().length() == 0
&& pesel.getText().trim().length() == 0 && adres.getText().trim().length() == 0
&& email.getText().trim().length() == 0 && dateOfBirth.getValue() == null && sexM.isSelected()
|| sexF.isSelected() || sexG.isSelected()) {
lbl.setText("All of places have to be filled");
} else {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
将所有 isEmpty()
替换为 .length()
检查 TextField
时,您会注意到有很多重复代码。如果摆脱这个会更好。
此外,通过使用 3 if
s,您可能犯了一些错误:您允许既不显示新阶段也不将标签设置为错误消息的情况。
此外,性别部分看起来您使用的 CheckBox
es/RadioButton
s 是互斥的。在这种情况下,您应该使用 ToggleGroup
,它允许您使用类似于 DatePicker
:
/**
* Helper method for checking, none of the TextFields passed are empty.
*/
private static boolean allFilled(TextField... textFields) {
for (TextField textField : textFields) {
if (textField.getText().trim().isEmpty()) {
return false;
}
}
return true;
}
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
if (allFilled(name, surname, pesel, adres, email)
&& dateOfBirth.getValue() != null
&& sexToggleGroup.getSelectedToggle() != null) {
... show new stage ...
} else {
... display error message ...
}
这是我的解决方案。也许这会对某人有所帮助。
@FXML
public void btn1(ActionEvent event) throws IOException {
TextField[] fieldList = new TextField[]{name, surname, pesel, adres, email};
ToggleGroup sexToggleGroup = new ToggleGroup();
sexM.setToggleGroup(sexToggleGroup);
sexF.setToggleGroup(sexToggleGroup);
sexG.setToggleGroup(sexToggleGroup);
boolean right = false;
for(TextField listF : fieldList)
if(listF.getText().equals("") || dateOfBirth.getEditor().getText().equals("") || sexToggleGroup.getSelectedToggle() == null){
lbl.setText("All of places have to be filled");
right = true;
break;
} else {
right = false;
}
if(right == false){
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("\Step2.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}