2016-04-07 35 views
5

これを行う方法を探していましたが、This question without answersしか見つかりませんでした。JavaFX画面解像度スケーリング

私は1366x768ラップトップで開発していますが、JavaFXを使用してGUIを作成しています(申し訳ありませんが、コードを投稿することはできません。基本的には、LabelPanes 、TextFieldsといくつかのグラフ)。私は別の解像度(1920×1080または1600x900)にプロジェクトをロードするとき

問題が来ます。

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

は、私は私の英語は完璧にはほど遠いですが、私は私の問題は、十分に説明願っています。

誰要素は、ステージの解像度に合わせて拡張可能にする方法上の任意の提案を持っていますか?

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

ありがとうございます。

更新:

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

<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> 

私はを1366x768にそれを拡張する場合、このコードは(ない本当のフルスクリーンだけstage.setMaximized(true);、)、400×300の画面(少なすぎると、私は知っている、それは一例です)に良さそうに見え、GridPaneスケール自体は無制限です。ステージ自体だけなので、画面の左上隅に400x300のペイン(小さなボタン付き)が表示されます。

TL; DR:ボタンは、画面の左上隅に滞在サンプルコード、および残りは私が解像度をスケールアップだけの空きスペースです。

アップデート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(); 
+0

私はいくつかのコードを見ることなく助けることは不可能だと思います。レイアウトの問題、おそらくハードコードされた位置やサイズのように聞こえる。リンクされた質問のコメントを読んだことがありますか?同様の問題と思われます。 –

+0

私は何もハードコードしていません。私は 'JavaFX SceneBuilder 2'を使ってすべてをやりました。サイズを見ると、すべて(Min、pref、max)には' USE_COMPUTED_SIZE'と書かれています。私はそれがコードを見ることなく助けるのは難しいと理解していますが、私はコードをオンラインに置くと、私は解雇されるかもしれませんが、私はそれを望んでいません、申し訳ありません。 :)助けてくれてありがとう:) – Tuzane

+0

私は参照してください、あなたの仕事に関連していない、小さな、自己完結型の例をコードすることができますか?問題をシミュレートする1​​つまたは2つのコンポーネントを備えた単純な画面? –

答えて

2

子にアンカーペインの制約を設定する必要があります。あなたのケースでgridpane

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

は、これはこれは、それぞれの側から0 0 0 0ピクセル、したがって、コンテナ内の子コンポーネントを最大化しますあなたの

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

後に移動します。

+1

あなたが今あなたを愛していることを想像することはできません:)これは小さな例のために完全に機能しました。 – Tuzane

+0

私は実際のプロジェクトのすべての要素にスケールを適用させるために、このコードをすべてのパネルに追加する必要があると思いますか?たとえば、GridPane内にボタンがある場合は、GridPane.leftAnchor = "0,0" ...を追加し、残りはButton要素に追加します。それは大丈夫ですか? – Tuzane

+1

よくアンカーペインはアンカーのように動作し、子供たちをそこに置くとハードコーディングされます。あなたがそれを拡大したら、それは単に親の中のそのピクセルで静的にとどまるだけです。 –