2016-10-02 14 views
0

TilePaneをウィンドウ幅全体に広げたいと思っています。 StageScene、およびTilePaneウィンドウを特別な設定なしで設定すると、これは期待どおりに機能します。これは、私の画面が9タイル分だけ十分に広いにもかかわらず、私がtilePane.setPrefColumns(100)と設定した場合でもそうです。手動でステージのサイズを設定していませんでした。JavaFX:シーンを切り替えるときにTilePaneがフルウィンドウを使用する

私のアプリケーションが起動すると、シーンは最初に幅1、次に320、次に1920に設定されます(1920x1080画面で開始されたとき)。私はXMonad(タイル張りのウィンドウマネージャー)を実行しています。これはウィンドウをフルスクリーンで表示する前に幅を320にするかもしれません。

ただし、別のシーン(stage.setScene)に切り替えて元のシーンを再利用したり、最初に使用したのと同じコードを使用して新しいシーンを作成したりすると、TilePaneの好ましい幅(1920以上)は、シーンとステージの幅を設定するために使用されます。そのため、上記の100の列は「表示されます」、画面は9列分の幅しかありません。

手動でウィンドウのサイズを変更すると、すべてが予想値(つまり、私の場合は1920)に「スナップ」します。

ステージに(再)取り付けられたシーンが画面の幅でレンダリングされることを確認するにはどうすればよいですか?どのように私は偽の "ウィンドウサイズ変更"イベントを引き起こすことができますか?どのようにしてシーン/ペインの幅をステージの幅に依存させることができますか?

複数の画面設定でも機能するソリューションをお勧めします。

答えて

0

実際に私の場合には役立っ何、ステージに初期widthheight値を割り当てることだった:

stage.setWidth(800); 
stage.setHeight(600); 
0

すべてのシーンが何ができるか同じステージ上にあると仮定すると

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 

stage.sceneProperty().addListener(e -> {   
    if(stage.getScene() == EnterSceneYouWantHere) 
    { 
     tilePane.setMaxWidth(gd.getDisplayMode().getWidth());                                 
     tilePane.setMaxHeight(gd.getDisplayMode().getHeight()); 
     tilePane.setMinWidth(gd.getDisplayMode().getWidth());                                 
     tilePane.setMinHeight(gd.getDisplayMode().getHeight()); 
    } 
}); 

作業をする必要がありますされているが、それはそれは、複数のモニタのために働く必要がない場合は、確かにテストしていません。

+0

'GraphicsEnvironment.getLocalGraphicsEnvironmentは()getDefaultScreenDevice();' 'HeadlessException'をスローし、でも'後。 stage.show() '(シーンを変更することなく)。 –

+0

これは適切に機能していたはずです。以前はその特定のコード行を使用しました。この 'Dimension screenSize = Toolkit.getDefaultToolkit()。getScreenSize();'を試し、 'gd'を' screenSize'に置き換えてください。 –

関連する問題