JavaFX : How to ask for user input before a GUI is displayed

标签 java user-interface javafx-2

我在 Netbeans 7.3.1 中使用 JavaFX 时遇到了一些问题。我正在尝试制作一款掷骰子的游戏。该程序应该询问用户骰子是否公平,以及其他信息(例如面数)来初始化要滚动的骰子。当点击滚动按钮时,它将滚动骰子。

我的问题是,由于 JavaFX 在启动 GUI 时会忽略主程序,因此我不确定在 GUI 加载之前在哪里(或如何)向用户询问此信息。

public class DiceGame extends Application {

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Roll Die!");
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            // 
            // code for rolling a die goes here.
        }
    });

    StackPane root = new StackPane();
    root.getChildren().add(btn);

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

    primaryStage.setTitle("Dice Game");
    primaryStage.setScene(scene);
    primaryStage.show();
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */


public static void main(String[] args) {

    //ask user for n value to initialize a die object before the javafx ui is launched.

    System.out.println("Is your die loaded or fair? *Input 1 for fair and 2 for loaded* ");

    Scanner fair_or_loaded = new Scanner(System.in); //Determines fair or loaded die.
    int input = fair_or_loaded.nextInt();

    if (input == 1) {
        System.out.println("Input an N value for a fair die: ");
        Scanner user_input = new Scanner(System.in); //Created a fair die.
        int n = user_input.nextInt();
        Die D1 = new Die(n); //User created die.

    } else { //Loaded die is created. Need Scanner for loadedSide and LoadFactor.
        System.out.println("Input an N value for a loaded die: ");
        Scanner loaded_n_input = new Scanner(System.in);
        int loaded_n = loaded_n_input.nextInt(); //loaded n value created

        System.out.println("Input a side to be loaded: ");
        Scanner user_side = new Scanner(System.in);
        int side_loaded = user_side.nextInt(); //loaded side created

        System.out.println("Input a load factor: ");
        Scanner user_load = new Scanner(System.in);
        int factor_load = user_load.nextInt(); //load factor created

        LoadedDie DL = new LoadedDie(loaded_n, side_loaded, factor_load); //Loaded die is created.
    }

     launch(args);  
  }
}

提前非常感谢!

最佳答案

正如该代码中的注释所述,JavaFX 应用程序在正确启动时,不会像传统 Java 应用程序那样使用 main() 方法 - 它们会创建默认应用程序类的实例并调用其start方法。

因此,如果您希望在显示 GUI 之前执行此代码,则必须在 start 方法的开头调用它。最好将相应的代码放在单独的方法中,然后在开始构建 UI 之前调用该方法。

关于JavaFX : How to ask for user input before a GUI is displayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211452/

相关文章:

java - 更改文件名,而不重写它

user-interface - Selenium GUI 测试?

javafx-2 - 动画的JavaFX 2圆路径

java - 使用一个 Controller 播放/暂停多个 MediaView JavaFX FXML

treeview - JavaFx 2.0 : get TreeItems or Nodes currently visible on screen

java - 如何让用户在二维数组中输入 5 个标记?

java - Log4j2 SmtpAppender 包含异常而无需堆栈跟踪源代码位置

java - 如何将字符串转换为int数组?

c++ - 我有什么方法可以将 openCV 输出流式传输到我自己的远程 C++ gui?

user-interface - 提示,像素和点,我的天哪!