web-dev-qa-db-ja.com

JavaFX画面解像度スケーリング

私はこれを行う方法を探していましたが、 この質問に対する答えのない質問 しか見つかりませんでした。

私は1366x768ラップトップで開発しています。JavaFXを使用してGUIを作成します(申し訳ありませんが、コードを投稿することはできません。基本的には、ラベル、テキストフィールド、およびカップルチャート)。

別の解像度(1920x1080または1600x900)でプロジェクトをロードすると、問題が発生します。

stage.setMaximized(true);を使用していますが、これは背景とステージ自体のみをスケーリングするため、すべての要素とコンテナ(パネル、ラベル、テキストフィールド.....)は1366x768の解像度と同じサイズのままで、正確に1366x768でない解像度ではGUIが「適合しない」。

私の問題を十分に説明できれば幸いです。私の英語は完璧ではありません。

要素をステージ解像度でスケーリングする方法について何か提案はありますか?

(すべてのモニターでソフトウェアを最大化または全画面表示する必要があるため、解像度を固定(たとえば1366x768)にすることは良い解決策のようには見えません)。

皆さん、ありがとうございました。

更新:

少し例を作成しました。これは、デフォルトのJavaFX AnchorPane内の2x1 GridPaneです。グリッドペインに2つのサンプルボタンを追加しました。

<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" >
<children>
    <GridPane prefHeight="300.0" prefWidth="400.0">
        <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
        <children>
            <Button fx:id="example1" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
            <Button fx:id="example2" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" />
        </children>
    </GridPane>
</children>

このコードは400x300画面で見栄えがよく(少なすぎる、これは単なる例です)、1366x768に拡大すると(実際のフルスクリーンではなく、stage.setMaximized(true);のみ)、GridPaneは拡大されません。ステージ自体なので、フルスクリーンの背景があり、画面の左上隅に400x300ペイン(その小さなボタン付き)があります。

TL; DR:ボタンの例は画面の左上隅にあり、残りの部分は解像度を拡大したときの空のスペースです。

Update 2;Javaコードを忘れました。

Parent root = FXMLLoader.load(getClass().getResource("UI.fxml"));
Scene scene = new Scene(root, Java.awt.Toolkit.getDefaultToolkit().getScreenSize().width,
            Java.awt.Toolkit.getDefaultToolkit().getScreenSize().height);
stage = new Stage();
stage.setMaximized(false);
stage.setScene(scene);
stage.setTitle("Example Menu");
stage.show();
12
Mayuso

子にアンカーペイン制約を設定する必要があります。あなたの場合グリッドペイン

AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"

これはあなたの後に行きます

 GridPane prefHeight="300.0" prefWidth="400.0" **HERE** 

これにより、コンテナ内の子コンポーネントが最大化されるため、両側から0 0 0 0ピクセルになります。

3
Tomas Bisciak