2016-10-29 3 views
5

У меня есть следующие проблемы:Как автоматически изменить размер окон в JavaFx для разных разрешений?

Я создал JavaFX окно на рабочий стол с разрешением Full HD, и я установить сцену так:

Scene scene = new Scene(root,1475,1015); 

При запуске приложения на ноутбуке с 1360*760 разрешение, я не вижу все приложение, и я не могу изменить его размер.

Как я могу настроить автоматическое изменение размера приложения в зависимости от рабочего стола/ноутбука и его разрешения и размеров?

ответ

2

Я считаю, что вы ищете для этого

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
int width = gd.getDisplayMode().getWidth(); 
int height = gd.getDisplayMode().getHeight(); 

Это позволит использовать размер экрана вашего устройства и все, что вам нужно сделать, чтобы изменить это сделать длину/ширину объектов в вашей программе пропорционально ширине и высоте экрана.

+0

Но как приложение будет изменить размер, если у меня внутри корня Родитель другой Pane и TabPane и TableView, которые установлены на этом размеры? Будет ли автоматически изменяться размер? –

+0

Вам нужно сделать эти пропорции размера экрана, а также iirc. –

0

Упоминание, что:

1) Вы должны использовать построить в макетах JavaFX (BorderPane, GridPane .... и т.д ...)

2) Там нет automaticall.You должны попробуйте это сделать.

3) Обычно, например, что вы хотите знать, экран (ширина или высота) без панели задач (в Windows, Linux, Mac, Solaris) .В этом случае вы играете с getVisualBounds()...

Main тема


вы спрашиваете о Responsive Design .Below является примером того, что вы хотите make.Although не лучшее решение, с этим я имею в виду, что может быть модифицировано для повышения производительности (я также добавил код для перемещения окна, если оно StageStyle.UNDECORATED Перетащите окно чтобы было увидеть это):

enter image description here

import javafx.application.Application; 
import javafx.scene.Cursor; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseButton; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.paint.Color; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class FX extends Application { 

    int screenWidth = (int) Screen.getPrimary().getBounds().getWidth(); 
    int screenHeight = (int) Screen.getPrimary().getBounds().getHeight(); 

    Stage stage; 
    Scene scene; 

    int initialX; 
    int initialY; 

    @Override 
    public void start(Stage s) throws Exception { 

     // root 
     BorderPane root = new BorderPane(); 
     root.setStyle("-fx-background-color:rgb(186,153,122,0.7); -fx-background-radius:30;"); 

     // Responsive Design 
     int sceneWidth = 0; 
     int sceneHeight = 0; 
     if (screenWidth <= 800 && screenHeight <= 600) { 
      sceneWidth = 600; 
      sceneHeight = 350; 
     } else if (screenWidth <= 1280 && screenHeight <= 768) { 
      sceneWidth = 800; 
      sceneHeight = 450; 
     } else if (screenWidth <= 1920 && screenHeight <= 1080) { 
      sceneWidth = 1000; 
      sceneHeight = 650; 
     } 

     // Scene 
     stage = new Stage(); 
     stage.initStyle(StageStyle.TRANSPARENT); 
     scene = new Scene(root, sceneWidth, sceneHeight, Color.TRANSPARENT); 

     // Moving 
     scene.setOnMousePressed(m -> { 
      if (m.getButton() == MouseButton.PRIMARY) { 
       scene.setCursor(Cursor.MOVE); 
       initialX = (int) (stage.getX() - m.getScreenX()); 
       initialY = (int) (stage.getY() - m.getScreenY()); 
      } 
     }); 

     scene.setOnMouseDragged(m -> { 
      if (m.getButton() == MouseButton.PRIMARY) { 
       stage.setX(m.getScreenX() + initialX); 
       stage.setY(m.getScreenY() + initialY); 
      } 
     }); 

     scene.setOnMouseReleased(m -> { 
      scene.setCursor(Cursor.DEFAULT); 
     }); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * Main Method 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

, но как изменится размер остальных компонентов внутри корня? –

+0

@Dina Bogdan Вот почему вы используете Layouts.Это будет сделано автоматически, но вы должны определить логику. Что я имею в виду, скажем, что при полном hd в окне отображаются 3 контейнера. Разрешение 1200 * возможно или возможно не отображаются 3 контейнера. Таким образом, вы будете отображать только 2 или отображать их с разным макетом. Вы должны прочитать книгу об этом. На один вопрос нельзя ответить ... Это похоже на то, что вы делаете приложение для компьютера, которое вы хотите быть на телефоне ... – GOXR3PLUS

+0

Я понимаю, что вы говорите ... Я думаю, что я могу использовать что-то вроде относительной позиции или что-то в этом роде. Я хочу запустить приложение на всех компьютерах, и у меня проблемы с графическим интерфейсом ... –

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