2016-12-25 4 views
0

Я пытался установить minWidth и minHeight сцены в методе start() после вызова show(), но мне кажется, getHeight() вызова не включает в себя украшение, как это предполагается. Высота сцены такая же, как и корневая сцена.этапа GetHeight не включает в себя украшений

Документ предполагает, что этого не должно быть. Любая идея, что я делаю неправильно?

ОС: Ubuntu 16,04

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     Parent r = FXMLLoader.load(getClass().getResource("things.fxml")); 
     Scene root = new Scene(r); 

     primaryStage.setTitle("foo"); 
     primaryStage.setScene(root); 

     primaryStage.sizeToScene(); 
     primaryStage.centerOnScreen(); 

     primaryStage.show(); 

     // primaryStage.getHeight() and root.getHeight() are the same here! 
     // doc suggests that they are supposed to be different 

     primaryStage.setMinWidth(primaryStage.getWidth()); 
     primaryStage.setMinHeight(primaryStage.getHeight()); 
    } 

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

ответ

1

Что объясняется в документации является правильным, вы можете иметь непонятым. Я объясняю, согласно тому, что написано там, и в соответствии с ошибками, которые вы сделали в вашем коде, еще одна вещь, я использую окна, так что может быть связано с вашей ОС:

sizeToScene() метод: Установите ширину и высоту этого окна, чтобы соответствовать размеру содержимого сцены этого окна. Мы понимаем, что ваш stage будет иметь тот же размер, что и ваша сцена, и вы не определили размер своей сцены, поэтому для его содержимого требуются только размерные свойства Parent/FXML.

Parent r = FXMLLoader.load(getClass().getResource("things.fxml")); 
Scene root = new Scene(r); //Size not defined 

Это объясняет размер, определенный в двух последних методов setMinWidth/setMinHeight. Здесь только дают почти одинаковое значение (+16 ширина и высота +38 Те украшения) к вашим stage

primaryStage.setMinWidth(primaryStage.getWidth()); //return the same width as Scene+16 
primaryStage.setMinHeight(primaryStage.getHeight()); //return the same height as Scene+38 

enter image description here

Если, например, Parent/FXML размер (600x400), будет возвращен метод этапа getWidth() (616) и getHeight() (438). Надеюсь, это поможет вам решить вашу проблему, удачи!

+0

Проблема в том, что я, кажется, не получаю ширину +16 и высоту +38, которую вы, кажется, получаете от украшения. Возможно, это ОС. – imbuedHope

+0

Я никогда не использовал Ubuntu или, по крайней мере, запрограммировал его, поэтому я не могу быть уверен, что это причина! –

+0

Возможно, я просто загрузил корень с определенной шириной и высотой и проверил размеры, украшения не были включены, когда я вызывал шоу, которое не является спецификацией. Также может быть плохая установка jdk. Ну что ж. – imbuedHope

Смежные вопросы