web-dev-qa-db-ja.com

異なる解像度のJavaFxでウィンドウのサイズを自動的に変更する方法は?

次の問題があります。

フルHDのデスクトップにJavaFXウィンドウを作成し、次のようにシーンを設定しました。

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

1360*760解像度のラップトップでアプリケーションを実行すると、アプリケーション全体が表示されず、サイズを変更できません。

デスクトップ/ラップトップとその解像度とサイズに応じて、アプリケーションのサイズを自動的に変更するように設定するにはどうすればよいですか?

6
Dina Bogdan

私はあなたがこれを探していると信じています

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

これにより、デバイスの画面サイズを使用できるようになり、サイズを変更するために必要なのは、プログラム内のオブジェクトの長さ/幅を画面の幅と高さに比例させることだけです。

言及:

  1. JavaFXレイアウト(BorderPane、GridPane ...など)でビルドを使用する必要があります。

  2. 自動的に行うことはできません。プログラミングするには、それを行う必要があります。

  3. たとえば、タスクバーなしで画面(幅または高さ)を知りたい場合が一般的です(Windows、Linux、Mac、Solarisの場合)。その場合はgetVisualBounds()...で遊んでください

メインテーマ


あなたは レスポンシブデザイン について質問しています。以下はあなたが作りたいものの例です。これは最善の解決策ではありませんが、これはパフォーマンスを向上させるために変更できることを意味します(私はいくつかのコードを追加しましたウィンドウが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);
    }

}
2
GOXR3PLUS

あなたはそれをすることができます:

   primaryStage.setMaximized(true);
1
nadhem
Scene scene = new Scene(root, Double.MAX_VALUE, Double.MAX_VALUE);
1
user10937260

1-JavaFXレイアウトを使用する(BorderPane、GridPane ....など...)

2-いくつかのレイアウト制約を追加する

シーンビルダーを使用してFXMLファイルを生成し、画面のサイズを変更して、何が起こっているかを確認できます。 layout のチュートリアルを参照してください。

これは、制約に基づいてコンポーネントを描画するようにプログラムに指示する方法であり、レスポンシブデザインになるため、制約に従い、コンポーネントを自動的に調整します。

0
Mazen Embaby