JavaFX - 如何从main方法创建许多窗口?

时间:2015-08-29 22:31:52

标签: java javafx

我希望能够在不同的窗口中创建多个图表,但我很难在JavaFX中这样做。因为用户界面是一个额外的'在应用程序中,我想单独启动UI并将其与主程序逻辑分开,因此我有以下代码:

public class UI extends Application {
    private Stage stage;

    @Override
    public void start(Stage stage) {
        this.stage = stage; // I don't really plan on even using this, but I've left this here so that I can break on it.
    }

    public Stage getStage() {
        return this.stage;
    }
}

public class Program {
    public static void main(String[] args) {
        // do other stuff

        Application.launch(UI.class, args);
        UI ui = new UI();
        // I want to create multiple windows (of charts) here, like this:
        Chart c1 = new Chart("c1");
        Chart c2 = new Chart("c2");
    }
}

public class Chart {
    public Chart(String title) {
        Stage stage = new Stage();
        // ...
        stage.show();
    }
}

正如您所看到的,这是一团糟,就像我对JavaFX的理解一样。事实上,由于Application类中的循环,代码无限执行。

我对如何创建多个阶段非常困惑。根据我所理解的,通过调用Application.launch方法,Application类然后调用UI类中的start方法。这确实发生了,但如前所述,它会陷入困境。但是,我实际上并不想创建一个UI类型的阶段,我想创建许多Chart阶段,但似乎为了使应用程序开始,我必须有一个start方法。

任何人都可以帮助我获得创建多个窗口所需的结果吗?

1 个答案:

答案 0 :(得分:2)

实际上,你创建其他窗口(JavaFX中的各个阶段)并不太遥远:

Stage stage = new Stage();
// ...
stage.show();

这是非常好的,您可以创建一个舞台,然后做任何事情(通常涉及向场景添加布局框/组件的组合,然后将该场景设置到舞台),然后显示它。我不建议只是盲目地在构造函数中显示舞台,但除此之外还有点。

尽管仍然带有JavaFX 2标签,this tutorial仍然是获得这方面基础知识的好方法。

其他两件事看起来像是目前特定的混淆点:

  • 您在start()方法中访问的阶段基本上只是为了方便而创建并提供给您的阶段。像其他任何一样对待它,虽然你当然不需要先创建它! (哎呀,在很多情况下你甚至可以忽略它,只是创造你自己的阶段,如果这有助于你更好地理解事物。)

  • 在正确加载的JFX应用程序中,经典main()方法实际上不应该在所有中调用,因此除了{{1}之外,不要在其中执行任何操作}。这只是一个失败的安全措施。 JFX应用程序的真正切入点是start方法,因此请确保所有逻辑都在那里(如果主要方法中的任何内容似乎都没有执行,这就是原因!)