Как исправить проблему 'JavaFX Dialogbox, принимающая пользовательский ввод' - PullRequest
0 голосов
/ 04 апреля 2019

enter image description here Я создаю диалоговое окно JavaFx и в значительной степени написал код.Моя проблема заключается в том, как отобразить сообщение об ошибке, если пользователь вводит неправильный ввод.Я знаю, что где-то должен использовать цикл while, но не уверен, где именно из-за структуры диалогового окна JavaFx.Вторая проблема заключается в том, что если пользователь вводит правильный ввод, скажем 1, если да, я хотел бы вызвать функцию для выполнения задачи.

Написанный мною код вызывает всплывающее окно и печатает результатввода пользователя в консоль.

    public static void AnotherMatch() { 
//creates a popUp window
Stage popUp = new Stage();

// makes sure no changes are made in the Main window while this window is open
popUp.initModality(Modality.APPLICATION_MODAL);
popUp.setTitle("New Game");
popUp.setMinWidth(400);
popUp.setHeight(200);

TextPanel textPanel2 = new TextPanel();
TextField nameInput = new TextField();
Button button = new Button("Enter");


//label explains how the game works
Label displayLabel = new Label();

displayLabel.setText("Do you want to play another match: Yes: 1 -- No: 2");

button.setOnAction(e -> isChoice(nameInput, nameInput.getText()));

//vbox stores label and is set in centre
VBox windowDisplay = new VBox();
windowDisplay.setStyle("-fx-background-color:Wheat"); //background colour is set
windowDisplay.getChildren().addAll(displayLabel,nameInput, button);

windowDisplay.setAlignment(Pos.CENTER);

Scene scene = new Scene(windowDisplay);
popUp.setScene(scene);
popUp.showAndWait();    } 

Код для функции isChoice

 private static boolean isChoice(TextField nameInput, String message) {
    // TODO Auto-generated method stub

     try {
         int choice = Integer.parseInt(nameInput.getText());
         if(choice == 1) {
             System.out.println("I want to play game again");
             return true;
         }
         else if (choice == 2){
             System.out.println("I want to stop playing");
             return false;
         }
         else {
             System.out.println("Invalid entry");
             return false;
         }
     }
     catch(NumberFormatException e){
         System.out.println(message + " Invalid .Enter 1 for yes and 2 for no");
         return false;
     }
}

Пользователю необходимо ввести да или нет.Если пользователь неверный ввод, сообщение об ошибке должно отображаться для пользователя и ответ на вопрос снова, пока они не ответят да или нет.

1 Ответ

2 голосов
/ 04 апреля 2019

Один из способов сделать это - использовать Bindings для отключения Button, если TextField не содержит Yes или No (игнорировать регистр).

Демо-приложение с использованием Bindings.

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication357 extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        TextField textField = new TextField();

        Button btn = new Button();
        btn.disableProperty().bind(Bindings.notEqualIgnoreCase("yes", textField.textProperty()).and(Bindings.notEqualIgnoreCase("no", textField.textProperty())));
        btn.setText("Say 'Hello World'");
        btn.setOnAction((ActionEvent event) -> {
            System.out.println("Hello World!");
        });

        StackPane root = new StackPane(new VBox(textField, btn));

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}
...