2016-10-29 15 views
5

Tôi có vấn đề sau đây:Làm thế nào để tự động thay đổi kích thước cửa sổ trong JavaFx cho các độ phân giải khác nhau?

Tôi đã tạo ra một cửa sổ JavaFX trên một máy tính để bàn với hd đầy đủ, và tôi thiết lập các cảnh như thế này:

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

Khi tôi chạy các ứng dụng trên một máy tính xách tay với 1360*760 độ phân giải, tôi không thể nhìn thấy toàn bộ ứng dụng và tôi không thể thay đổi kích thước.

Làm cách nào để đặt ứng dụng tự động thay đổi kích thước trong chức năng của máy tính để bàn/máy tính xách tay và độ phân giải cũng như kích thước của nó?

Trả lời

2

Tôi tin rằng bạn đang tìm kiếm này

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

này sẽ cho phép bạn sử dụng kích thước màn hình của điện thoại và tất cả các bạn cần phải làm gì để thay đổi kích thước là làm cho chiều dài/chiều rộng của các đối tượng trong chương trình của bạn tỷ lệ thuận với chiều rộng và chiều cao của màn hình.

+0

Nhưng làm thế nào ứng dụng sẽ thay đổi kích thước nếu tôi có bên trong thư mục gốc Chánh Pane khác và TabPane và TableView đó sẽ được đặt trên khía cạnh này? Sẽ tự động thay đổi kích thước? –

+0

Bạn cần phải làm cho những tỷ lệ của kích thước màn hình cũng như iirc. –

0

đề cập rằng:

1) Bạn phải sử dụng xây dựng trong bố trí JavaFX (BorderPane, GridPane .... vv ...)

2) Không có automaticall.You phải lập trình nó để làm như vậy.

3) Người ta thường ví dụ mà bạn muốn biết màn hình (chiều rộng hoặc chiều cao) mà không có thanh tác vụ (trong Windows, Linux, Mac, Solaris) .Tại trường hợp đó bạn chơi với getVisualBounds()...

chính theme


bạn đang hỏi về Responsive Design .Below là một ví dụ về những gì bạn muốn make.Although không phải là giải pháp tốt nhất, với điều này tôi có nghĩa là nó có thể được sửa đổi cho hiệu suất tốt hơn (tôi cũng đã bổ sung thêm một số mã di chuyển cửa sổ nếu nó là StageStyle.UNDECORATED Kéo cửa sổ đã thấy điều này):

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

nhưng cách các thành phần khác bên trong gốc sẽ thay đổi kích thước? –

+0

@Dina Bogdan Đó là lý do tại sao bạn đang sử dụng Layouts. Nó sẽ được thực hiện tự động, nhưng bạn phải xác định logic. Ý tôi là, nói rằng ở đầy đủ hd 3 container được hiển thị trên cửa sổ. Độ phân giải 1200 * có thể hoặc có thể không 3 container có thể được hiển thị. Do đó bạn sẽ chỉ hiển thị 2 hoặc hiển thị chúng với bố cục khác nhau.Bạn phải đọc một cuốn sách về điều đó. Không thể trả lời trong một câu hỏi ... Nó giống như bạn đang tạo một ứng dụng cho máy tính bạn muốn được hiển thị trên điện thoại ... – GOXR3PLUS

+0

Tôi hiểu những gì bạn đang nói ... Tôi nghĩ rằng tôi có thể sử dụng một cái gì đó giống như vị trí tương đối hoặc một cái gì đó như thế. Tôi muốn chạy ứng dụng của mình trên tất cả các loại máy tính và tôi gặp sự cố với GUI .... –

Các vấn đề liên quan