2016-10-29 23 views
5

Mam następujący problem:Jak automatycznie zmienić rozmiar okna w JavaFx dla różnych rozdzielczości?

Stworzyłem okno JavaFX na pulpit z Full HD i ustawić scenę tak:

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

Kiedy uruchomić aplikację na laptopie z 1360*760 rozdzielczość, nie widzę całej aplikacji i nie mogę zmienić jej rozmiaru.

W jaki sposób ustawić aplikację, aby automatycznie zmieniła rozmiar w zależności od komputera/laptopa, a także rozdzielczości i wymiarów?

Odpowiedz

2

wierzę szukasz tego

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

Pozwoli to na korzystanie z wielkości ekranu urządzenia, a wszystko, co trzeba zrobić, aby zmienić rozmiar jest dokonać długość/szerokość obiektów w swoim programie proporcjonalna do szerokości i wysokości ekranu.

+0

Ale jak aplikacja będzie zmiana rozmiaru czy mam wewnątrz korzenia dominującej inny Pane i TabPane i tableview, które są ustawione na tej wymiarach? Czy automatycznie zmieni rozmiar wszystkich? –

+0

Musisz zrobić te proporcje rozmiaru ekranu, jak również iirc. –

0

wspomnieć, że:

1) Musisz użyć zbudować w układach JavaFX (BorderPane, GridPane .... etc ...)

2) Nie ma automaticall.You musiał zaprogramuj to, aby to zrobić.

3) Powszechne jest na przykład, że chcesz wiedzieć, ekran (szerokość lub wysokość) bez paska zadań (Windows, Linux, Mac, Solaris) .W takim przypadku grasz z getVisualBounds()...

Głównego motyw


Pytasz o Responsive Design .Below jest przykładem tego, co chcesz make.Although nie jest najlepszym rozwiązaniem, z tym mam na myśli to może być modyfikowany w celu zwiększenia wydajności (ja też dodałem trochę kodu aby przesunąć okno, jeśli jest to StageStyle.UNDECORATED Przeciągnij okno się zobaczyć):

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

, ale jak zmieniają się pozostałe komponenty wewnątrz korzenia? –

+0

@Dina Bogdan Dlatego właśnie korzystasz z Layouts.It zostanie to zrobione automatycznie, ale musisz zdefiniować logikę.Co mam na myśli to, powiedzmy, że przy pełnym hd 3 kontenery są wyświetlane w oknie. Przy rozdzielczości 1200 * może, a może nie można wyświetlić 3 kontenerów. W ten sposób wyświetlisz tylko 2 lub wyświetlisz je z innym układem. Musisz przeczytać książkę o tym. Nie można odpowiedzieć jednym pytaniem ... To tak, jakbyś robił aplikację na komputer, który chcesz być wyświetlany na telefonie ... – GOXR3PLUS

+0

Rozumiem, co mówisz ... Myślę, że mogę użyć czegoś takiego jak pozycja względna lub coś podobnego. Chcę uruchomić moją aplikację na wszystkich komputerach i mam problemy z interfejsem graficznym .... –

Powiązane problemy