2015-11-14 75 views
0

我在場景生成器中看到應用程序gui時出現問題,而與運行場景生成器相比,它存在問題。爲什麼正在運行的JavaFX應用程序場景大小與場景構建器預覽不同

場景生成器預覽中的應用程序UI看起來是這樣的: App in scene builder preview looks like that:

運行時,它看起來像該應用程序: enter image description here

所以元素肯定是在不同的地方。

FXML:

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

<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.BorderPane?> 


<BorderPane prefHeight="242.0" prefWidth="465.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8"> 
    <bottom> 
     <Pane prefHeight="242.0" prefWidth="425.0" BorderPane.alignment="CENTER"> 
     <children> 
      <TextField layoutX="45.0" layoutY="37.0" /> 
      <TextField layoutX="45.0" layoutY="112.0" /> 
      <Button layoutX="337.0" layoutY="178.0" mnemonicParsing="false" text="Button" /> 
     </children> 
     </Pane> 
    </bottom> 
</BorderPane> 

Main.java:

package com.tempapp; 

import javafx.application.Application; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Pane; 
import javafx.fxml.FXMLLoader; 


public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      BorderPane root1 = (BorderPane)FXMLLoader.load(getClass().getResource("LoginWindows.fxml")); 
      Scene scene = new Scene(root1); 
      scene.getStylesheets().add(getClass().getResource("LoginWindows.fxml").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
     System.out.println("HELLO"); 
    } 
} 

那是什麼應用程序看起來不一樣的原因嗎?我試圖爲場景/舞臺設置適當的高度和寬度值,但它不能解決它。這是由java虛擬機引起的,由於某些分辨率縮放?我的顯示器是全高清的。

回答

0

在SceneBuilder中,將最大高度和最大寬度設置爲USE_PREF_SIZE。同樣,您也可以設置最小值。

此外,對於這樣的場景,BorderPane可能會矯枉過正。你可以很容易地使用帶有VBox的StackPane,甚至可以使用GridPane。

!!編輯!

試試這個:

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

<?import javafx.geometry.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.BorderPane?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="180.0" prefWidth="260.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <VBox layoutX="45.0" layoutY="37.0" spacing="12.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <children> 
      <TextField fx:id="txtUserName" /> 
      <TextField fx:id="txtPassword" /> 
      <HBox> 
       <children> 
        <Pane HBox.hgrow="ALWAYS" /> 
        <Button fx:id="btnOk" mnemonicParsing="false" text="Button" /> 
       </children> 
      </HBox> 
     </children> 
     <padding> 
      <Insets bottom="18.0" left="18.0" right="18.0" top="18.0" /> 
     </padding> 
     </VBox> 
    </children> 
</AnchorPane> 
+0

我創辦的這種情況的原因時,Windows縮放很爛,它被關閉後,萬物工作正常。感謝幫助! – TheOmniano

+0

在我看來,如果縮放對你的佈局造成嚴重影響,也許你的佈局不適當。嘗試使用VBox而不是使用layoutX和layoutY來定位TextField。 – RonSiven

+0

使用示例FXML編輯答案。 – RonSiven

相關問題