2013-12-22 5 views
19

この小さなJavaFXのテストアプリケーションJavaFX:なぜstage.setResizable(false)が余白を増やすのですか?

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class ApplicationWithNonResizableStage extends Application { 

    public static void main(final String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(final Stage primaryStage) throws Exception { 
     final Rectangle rectangle = new Rectangle(200, 100, Color.POWDERBLUE); 
     final BorderPane pane = new BorderPane(rectangle); 
     final Scene scene = new Scene(pane); 
     primaryStage.setScene(scene); 
     primaryStage.setResizable(false); 
     primaryStage.show(); 
    } 
} 

不要なパディングを持つウィンドウを作成:

コール primaryStage.setResizable(false)を削除

stage with margin

も効果を削除します。

stage without margin

は何ですか間違っている?

+0

解決方法が見つかりましたか?他のコンポーネントにも影響があります:http://stackoverflow.com/questions/22620919/combobox-options-receive-margin-upon-making-the-stage-resizable – tvkanters

+0

@TVK:私はステージの問題を解決できました。 –

+0

は私のバグのように見えますが、FXの問題追跡ツールで問題を提出することを検討するかもしれません – kleopatra

答えて

39

既にコメントとして、バグのような!/サイズ変更可能な匂いのこの異なる挙動は(誰かが道の周りに明示的にステージに合わせてある)を手動サイズよりも(問題;-)

短いを提出検討するかもしれませんシーン:

primaryStage.setScene(scene); 
primaryStage.setResizable(false); 
primaryStage.sizeToScene(); 

これはjdk8では動作していますが、jdk7では動作していないことに気付きました。

便宜のために、jewelseaが提出した元のレポートは(新しい座標で)https://bugs.openjdk.java.net/browse/JDK-8089008の複製としてクローズされましたが、まだ開かれており、勝利のみであるとコメントされています。

+3

作成されたバグレポート[RT-36413サイズ変更不可能なステージで初期ステージサイズが正しく設定されていません](https://javafx-jira.kenai.com/browse/RT-36413)。 – jewelsea

0

フレームを作成するサイズのディメンションを作成してみてください。Dimension name = new Dimension(height,width) - 次に、ディメンションサイズを矩形BorderPaneおよびSceneに設定してください。あなたはすべてが同じサイズになるようにしたいですか?

+0

返信いただきありがとうございます。手動でサイズを設定しても、 'setResizable(false)'を導入するときよりもステージが大きくなるので問題は解決しませんでした。 –

+0

'setResizable(false)'と 'setScene(Scene)'の順序を入れ替えてみてください。 –

2

これは説明はありませんが、それは問題を解決:

@Override 
public void start(final Stage primaryStage) throws Exception { 
    final Dimension d = new Dimension(210, 110); 
    final Rectangle rectangle = new Rectangle(d.width, d.height, Color.POWDERBLUE); 
    final BorderPane pane = new BorderPane(rectangle); 
    pane.maxWidth(d.height); 
    pane.maxWidth(d.width); 
    final Scene scene = new Scene(pane, d.width, d.height); 
    primaryStage.setScene(scene); 
    primaryStage.setResizable(false); 
    primaryStage.setWidth(d.width); 
    primaryStage.setHeight(d.height); 
    primaryStage.show(); 
} 

キーは、適切なタイミングでStageの幅と高さを設定しています。

関連する問題