当前位置: 首页 > 面试题库 >

屏幕上的JavaFX中心舞台

巫马俊力
2023-03-14
问题内容

我想在屏幕上居中放置一个舞台。
这是我尝试过的:

public class Test extends Application
{
   @Override
   public void start(final Stage primaryStage)
   {
       Button btn = new Button();
       btn.setText("Say 'Hello World'");
       btn.setOnAction(new EventHandler<ActionEvent>()
       {
          @Override
          public void handle(ActionEvent event)
          {
            System.out.println("Hello World!");
          }
        });
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.centerOnScreen();
        primaryStage.show();
   }

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

调用centerOnScreen()后,舞台过高。它似乎无法正常工作。我需要自己计算x和y pos吗?或者如何正确使用此功能?


问题答案:

的默认实现centerOnScreen()如下:

Rectangle2D bounds = getWindowScreen().getVisualBounds();
double centerX = bounds.getMinX() + (bounds.getWidth() - getWidth())
                                           * CENTER_ON_SCREEN_X_FRACTION;
double centerY = bounds.getMinY() + (bounds.getHeight() - getHeight())
                                           * CENTER_ON_SCREEN_Y_FRACTION;
x.set(centerX);
y.set(centerY);

哪里

CENTER_ON_SCREEN_X_FRACTION = 1.0f / 2;
CENTER_ON_SCREEN_Y_FRACTION = 1.0f / 3;

centerY 总是将舞台设置为比中心高一点。

要将舞台定位在精确的中心,可以使用您设置的 自定义X和Y值

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {

        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction((ActionEvent event) -> {
                System.out.println("Hello World!");
        });
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
        Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds();
        primaryStage.setX((primScreenBounds.getWidth() - primaryStage.getWidth()) / 2);
        primaryStage.setY((primScreenBounds.getHeight() - primaryStage.getHeight()) / 2);
    }

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


 类似资料:
  • 那么当屏幕被锁定时,是否有任何方法显示特定的XAML页面。目前我正在使用toast通知来完成此操作。但是toast通知的问题是我对UI没有太多的控制。

  • 问题内容: 我正在JavaFx中创建一个应用程序,如果要打开任何子阶段,则应在其中进行操作,然后应在父阶段的中心打开它。我正在尝试使用它来执行此操作,但是它将子级分配到屏幕的中心,而不是父级的中心。如何将子阶段分配给父阶段的中心? 问题答案: 您可以使用父级的X / Y / width / height属性来执行此操作。除了使用,您可以执行以下操作:

  • 我正在尝试构建一个JavaFX应用程序,其中我有一个名为“Start”的按钮和一个ImageView。使用JavaFX-12的机器人类,我正在尝试在单击按钮时截取笔记本电脑屏幕的屏幕截图,并在ImageView中的运行时逐一显示图像。我的问题是JavaFX窗口没有响应,程序崩溃(可能)。甚至让线程进入睡眠状态似乎也不起作用。我假设它不起作用,因为我没有设置任何fps规则,但我怎么能这样做呢?目前,

  • 我正在从事javaFx项目,我在笔记本电脑上创建的,一切都很好,但是当我更改屏幕时,现在我使用大屏幕,我发现我的应用程序受屏幕分辨率的影响,一些组件不适合屏幕。这是我的代码: 这是我的父布局

  • 假设用户单击屏幕上的任何位置,我需要将该点,例如(500200)转换为屏幕中心的极点。抽头位置(500,200)从屏幕左上角开始测量。 因此,我必须从一个原点位于屏幕左上角的笛卡尔坐标系转换为另一个原点位于屏幕中间的笛卡尔坐标系(宽度/2,高度/2),然后再从中心原点转换为一个极点。 另一种提问方式是我需要屏幕点与屏幕中心的角度。

  • 在我的应用程序中,我有多个.fxml文件。当我在应用程序中设置屏幕时,我还设置了<code>SetOnCloseRequest()管理银行屏幕后不久,应用程序并没有停止运行。所以在那之后我什么都做不了,因为我没有GUI。是否有人知道如何确保屏幕不会关闭? 下面是我的带有< code>SetOnCloseRequest()方法的主类: 这是我的类: