JavaFX 2.0でアプリケーション作成(その3) - torutkのブログ
の続きです。前回は、GridPaneの各Grid間隔を指定しました。
今回は、ボタンの大きさを揃えます。
ボタンの大きさは、ボタンに設定した文字列の長さに基づいています。JavaFX 2では、AWT/Swing同様、コントロールには最小/最大/推奨サイズがあります。
ボタンをはじめとするUIコントロールの基底クラスjavafx.scene.control.Controlクラスを見ると大きさに関して次のプロパティが定義されています。
プロパティ名 | 型 |
---|---|
height | double |
width | double |
minHeight | double |
minWidth | double |
maxHeight | double |
maxWidth | double |
prefHeight | double |
prefWidth | double |
Buttonクラスの推奨サイズ(prefHeightとprefWidth)は、基本的にButtonに設定した文字列の長さによって決まり*1、最大サイズ(maxHeightとmaxWidth)は推奨サイズと同じに設定されます*2。
GridPaneでは、同じ列の横幅は、もっとも長いコントロールに従います。ところが、ButtonはmaxWidthがprefWidthと同一なので、maxWidthよりGridPaneの格子の横幅が大きい場合、maxWidthを越えて引き伸ばされることはなく、格子内に(おそらく)デフォルトの左寄せで表示されます。
そこで、ButtonのmaxWidthをGridPaneの格子より大きな値にしておくことで、Buttonを格子一杯の大きさになるようにします。
コードは次のようになります。setMaxWidthメソッドで最大値をdoubleの最大にしておきます。
Button tryButton = new Button("Try acquire"); tryButton.setMaxWidth(Double.MAX_VALUE); semaphorePane.add(tryButton, 0, 1);
もう一つのボタンも同様に最大値を設定します。
Button releaseButton = new Button("Release"); releaseButton.setMaxWidth(Double.MAX_VALUE); semaphorePane.add(releaseButton, 0, 2);
この時点でなんとか見られる、とてもJavaFXらしからぬGUIが出来上がりました。
次回は、Semaphoreを操作するロジックを実装して、アプリケーションの初版を完成させます。