私はこれを行う方法を探していましたが、 この質問に対する答えのない質問 しか見つかりませんでした。
私は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();
子にアンカーペイン制約を設定する必要があります。あなたの場合グリッドペイン
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ピクセルになります。