次の問題があります。
フルHDのデスクトップにJavaFX
ウィンドウを作成し、次のようにシーンを設定しました。
Scene scene = new Scene(root,1475,1015);
1360*760
解像度のラップトップでアプリケーションを実行すると、アプリケーション全体が表示されず、サイズを変更できません。
デスクトップ/ラップトップとその解像度とサイズに応じて、アプリケーションのサイズを自動的に変更するように設定するにはどうすればよいですか?
私はあなたがこれを探していると信じています
GraphicsDevice Gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int width = Gd.getDisplayMode().getWidth();
int height = Gd.getDisplayMode().getHeight();
これにより、デバイスの画面サイズを使用できるようになり、サイズを変更するために必要なのは、プログラム内のオブジェクトの長さ/幅を画面の幅と高さに比例させることだけです。
言及:
JavaFXレイアウト(BorderPane、GridPane ...など)でビルドを使用する必要があります。
自動的に行うことはできません。プログラミングするには、それを行う必要があります。
たとえば、タスクバーなしで画面(幅または高さ)を知りたい場合が一般的です(Windows、Linux、Mac、Solarisの場合)。その場合はgetVisualBounds()...
で遊んでください
メインテーマ
あなたは レスポンシブデザイン について質問しています。以下はあなたが作りたいものの例です。これは最善の解決策ではありませんが、これはパフォーマンスを向上させるために変更できることを意味します(私はいくつかのコードを追加しましたウィンドウがStageStyle.UNDECORATED
の場合は、ウィンドウをドラッグしてこれを表示します):
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);
}
}
あなたはそれをすることができます:
primaryStage.setMaximized(true);
Scene scene = new Scene(root, Double.MAX_VALUE, Double.MAX_VALUE);
1-JavaFXレイアウトを使用する(BorderPane、GridPane ....など...)
2-いくつかのレイアウト制約を追加する
シーンビルダーを使用してFXMLファイルを生成し、画面のサイズを変更して、何が起こっているかを確認できます。 layout のチュートリアルを参照してください。
これは、制約に基づいてコンポーネントを描画するようにプログラムに指示する方法であり、レスポンシブデザインになるため、制約に従い、コンポーネントを自動的に調整します。