如何在JavaFX启动时修复阶段中可见位置的跳跃?

时间:2019-05-10 21:27:57

标签: java javafx window

我在Ubuntu上的IDEA中运行JavaFX程序。窗口首先位于屏幕的左上角,然后我看到窗口跳到中心。我该如何处理?

我尝试了不同的Stage方法,但没有帮助。

启动方法

@Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("View/MainMenuView.fxml"));
        primaryStage.setTitle("Flash Cards");
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.setResizable(false);
        primaryStage.show();
    }

MainMenuView.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.Cursor?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controllers.MainMenuController">
   <children>
      <Pane fx:id="mainMenu" prefHeight="600.0" prefWidth="800.0">
         <children>
            <Text layoutX="233.0" layoutY="116.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Flash Cards v1" textAlignment="CENTER" wrappingWidth="333.419921875">
               <font>
                  <Font size="37.0" />
               </font>
            </Text>
            <Button fx:id="trainingButton" layoutX="314.0" layoutY="225.0" mnemonicParsing="false" prefHeight="75.0" prefWidth="172.0" style="-fx-background-color: #fff; -fx-border-color: #000; -fx-border-width: 2;" text="Training">
               <cursor>
                  <Cursor fx:constant="OPEN_HAND" />
               </cursor>
            </Button>
            <Button fx:id="addNewWordButton" layoutX="314.0" layoutY="325.0" mnemonicParsing="false" prefHeight="75.0" prefWidth="172.0" style="-fx-background-color: #fff; -fx-border-color: #000; -fx-border-width: 2;" text="Add a new word">
               <cursor>
                  <Cursor fx:constant="OPEN_HAND" />
               </cursor>
            </Button>
         </children>
      </Pane>
   </children>
</AnchorPane>

我只希望程序启动时窗口立即居中。

1 个答案:

答案 0 :(得分:0)

这是JavaFX本身的错误。解决此问题之前,要解决此问题:

primaryStage.show();
primaryStage.centerOnScreen();

您需要在centerOnScreen()之后立即致电show(),以防止它出现在角落。