【问题标题】:Two panes or two scenes in JavaFX?JavaFX 中的两个窗格或两个场景?
【发布时间】:2017-05-14 12:09:02
【问题描述】:

我是 JavaFX 的新手,我正在尝试了解构建我的应用程序的最佳方式。我的应用开始显示注册/登录表单,在您执行任一操作后,该表单就会消失并替换为应用的实际 UI。

这应该是两个场景还是应该是同一场景中的两个窗格(或类似的东西)?

【问题讨论】:

  • Switch between panes in JavaFX 中研究了几种方法。
  • 选择权在你。我有一个示例在成功登录here 后加载不同的场景。
  • @SedrickJefferson:感谢您指出该示例。不幸的是,它创建了单独的阶段,而不是我想要的。我想留在一个阶段。

标签: java javafx javafx-2 javafx-8


【解决方案1】:

使用单个 Stage(窗口)并在 2 个 Scenes 之间切换或使用 2 个窗口在它们之间切换完全取决于您。这是一个示例代码,说明如何使用 1 Stage 并在 Scenes 之间切换。我需要将此代码归功于@thenewboston,他在 YouTube 上有一个非常好的、有用且易于遵循的 JavaFX 教程:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;

public class Main extends Application {
    Stage window;
    Scene scene1, scene2;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primartStage;

        Label label1 = new Label("Welcome to the first scene!");
        Button button1 = new Button("Go to scene 2");
        button1.setAction(e -> window.setScene(scene2));

        //  Layout 1 - children are laid out in vertical column
        VBox layout1 = new VBox(20);

        layout1.getChildren().addAll(label1, button1);
        scene1 = new Scene(layout1, 200, 200);

        //  Button 2
        Button button2 = new Button("Go back to scene 1");
        button2.setAction(e -> window.setScene(scene1));

        //  Layout 2
        StackPane layout2 = new StackPane();
        layout2.getChildren().add(button2);

        scene2 = new Scene(layout2, 600, 600);

        window.setScene(scene1);
        window.setTitle("Switching Scenes");
        window.show();
    }
}

【讨论】:

  • 这似乎回答了“两个阶段或两个场景”的问题,而不是“两个场景或两个 [root] 窗格”的问题。
  • 我认为显示单独登录并在成功登录后显示应用程序的其余部分已经很常见了。如果在同一个窗口(@98​​7654326@)上使用 2 个窗格,则首先仅启用登录窗格,然后在成功登录后启用另一个窗格。这取决于 UI/UX。
  • 在单个场景中切换场景和切换单个场景的根(必须在单个场景中)之间没有 UX 差异。我认为你错过了问题的重点,它从未提到两个阶段作为一个选项。
  • 可能是我没有抓住重点,或者没有完全理解这个问题。
  • 是的,没错,我没有考虑两个阶段。我的问题是两个场景与一个场景中的两个窗格。
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多