Итак, для начала вам нужно переосмыслить несколько вещей, например, индивидуальную настройку setPromptText(...);
на одно и то же, если вы постоянно набираете одно и то же, есть большая вероятность, что это можно сделать более эффективно.поэтому я создал метод инициализации, который выполняет те вещи, которые вы перепечатываете, это означает, что когда класс инициализируется, он будет работать независимо от того, что в этом методе я также удалил static из метода nameIsValid()
, так как он не был нужен, так же как и текстовое полевходной параметр.Затем я запускаю имя допустимого метода в текстовом поле, теряя фокус, так как это лучший дизайн.Посмотрите на конечный результат ниже
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
GridPane root = new GridPane();
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(30, 30, 30, 30));
root.setHgap(5.5);
root.setVgap(5.5);
// TextFields
NameTextField firstName = new NameTextField();
// firstName.setPromptText("Name");
// firstName.setOnMouseExited(e -> NameTextField.nameIsValid(firstName));
NameTextField secondName = new NameTextField();
// secondName.setPromptText("Name");
// secondName.setOnMouseExited(e -> NameTextField.nameIsValid(secondName));
NameTextField thirdName = new NameTextField();
// thirdName.setPromptText("Name");
// thirdName.setOnMouseExited(e -> NameTextField.nameIsValid(thirdName));
PhoneTextField firstNumber = new PhoneTextField();
// firstNumber.setPromptText("(###) ###-####");
// firstNumber.setOnMouseExited(e -> PhoneTextField.phoneIsValid(firstNumber));
PhoneTextField secondNumber = new PhoneTextField();
// secondNumber.setPromptText("(###) ###-####");
// secondNumber.setOnMouseExited(e -> PhoneTextField.phoneIsValid(secondNumber));
PhoneTextField thirdNumber = new PhoneTextField();
// thirdNumber.setPromptText("(###) ###-####");
// thirdNumber.setOnMouseExited(e -> PhoneTextField.phoneIsValid(thirdNumber));
// "Create Profiles" button
StackPane btnPane = new StackPane();
Button btn = new Button("Create Profiles");
btnPane.getChildren().add(btn);
StackPane.setAlignment(btn, Pos.CENTER);
//Enable/Disable button depending on if any TextField is empty
btn.disableProperty().bind(firstName.textProperty().isEmpty()
.or(secondName.textProperty().isEmpty()).or(thirdName.textProperty().isEmpty())
.or(firstNumber.textProperty().isEmpty()).or(secondNumber.textProperty().isEmpty())
.or(thirdNumber.textProperty().isEmpty()));
// Layout of window
root.add(firstName, 0, 0);
root.add(secondName, 0, 1);
root.add(thirdName, 0, 2);
root.add(firstNumber, 1, 0);
root.add(secondNumber, 1, 1);
root.add(thirdNumber, 1, 2);
root.add(btnPane, 0, 3, 2, 3);
// Creating scene
Scene scene = new Scene(root);
primaryStage.setTitle("Data Entry GUI");
primaryStage.setScene(scene); primaryStage.show();
}
public static void main(String[] args) { launch(args); }
public class NameTextField extends TextField {
public NameTextField(){
super();
initialize();
}
public NameTextField(String text){
super(text);
initialize();
}
// public static void nameIsValid(NameTextField input) {
private void nameIsValid() {
String text = this.getText();
if (text.split(" ").length != 2)
this.setStyle("-fx-border-color: red; -fx-text-inner-color: red;");
else
this.setStyle("-fx-text-inner-color: black;");
}
private void initialize() {
this.setPromptText("Name");
this.focusedProperty().addListener((arg0, oldPropertyValue, newPropertyValue) -> {
if (oldPropertyValue)
nameIsValid();
});
}
}
public class PhoneTextField extends TextField{
public PhoneTextField(){
super();
initialize();
}
public PhoneTextField(String text){
super(text);
initialize();
}
// public static void phoneIsValid(PhoneTextField input){
private void phoneIsValid(){
String text = this.getText();
if (text.split(" ").length != 2)
this.setStyle("-fx-border-color: red; -fx-text-inner-color: red;");
else
this.setStyle("-fx-text-inner-color: black;");
}
private void initialize() {
this.setPromptText("(###) ###-####");
this.focusedProperty().addListener((arg0, oldPropertyValue, newPropertyValue) -> {
if (oldPropertyValue)
phoneIsValid();
});
}
}
}