###環境
言語: java
環境: eclipse
レイアウト:GridLayout
GUI : swing
###困っていること
図のようにGridLayoutでのラベルとボタンを配置したいんですが、うまくできないので教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
swingであればBorderLayout,BoxLayout,GridBagLayout,GroupLayoutなど複数の方法が使えそうですが、BorderLayoutを使うなら以下のような階層にすれば配置だけはそれらしくなります。しかし、各部品の大きさは意図通りにはならないと思います。
JPanel(BorderLayout) +CENTER: JLabel +SOUTH: Box(水平) +Button +Button +Button
swingのレイアウト制約に慣れるためには、各部品の最小、推奨、最大サイズ、アラインメント(左よせとか中央配置とか)がデフォルトでどのような値になるかを研究し、どの制約を指定すれば期待どおりになるか調べてみるとよいです。
制約なしでWindows上で実行すると最小、推奨、最大サイズは以下のようになります。
部品 | 最小 | 推奨 | 最大 |
---|---|---|---|
JLabel | 27, 16 | 27, 16 | 27, 16 |
Box | 210, 26 | 210, 26 | 210, 26 |
JButton | 70, 26 | 70, 26 | 70, 26 |
JLabelやJButtonの大きさは表示テキストにより決まり、さらにJLabelはデフォルトで左寄せでテキストが配置されます。そこで、ご質問にあるレイアウトに近づけるためには例えば以下が必要です。
- JLabelの推奨サイズを適当に大きくする
- JLabelのアラインメントをJLabel.CENTERにする
コンストラクターの第三引数に指定するとよいです。
- JButtonの推奨サイズと最大サイズを適当に大きくする
どちらか一方を指定しただけでは意図通りの大きさになりません。
レイアウト制約にはそれぞれのGUIライブラリーのくせのようなものがあります。例えばswingのJButtonでは、推奨サイズを指定すれば大きくなってくれてもよさそうなのに実際には最大サイズも指定しないといけなかったりといったところが「直感的」でないように思います。
awt/swingを解説したページには(こうしたややこしい点の説明が面倒なせいか)単純にsetSizeで大きさを指定してしまうサンプルが載っていることがありますが、setSizeは必ずしもベストな方法ではありません(※)ので注意が必要です。
※:setSizeがベストでない理由
setSizeで一旦大きさを指定したとしても、レイアウト制約を適用するためにJFrameコンストラクターでpack()を呼び出すとsetSizeの指定は無視され、最小、推奨、最大サイズ等の制約に従ったレイアウト計算が行われてしまいます。ゆえにsetSizeはレイアウトマネージャーを一切使わずに位置と大きさを全て自分で明示的に指定する場合でもない限りは使うべきではありません。setSizeを使うなら、JPanelにレイアウトマネージャーを指定することには意味がなくなります。
投稿2017/06/15 18:17
編集2017/06/15 18:28総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/15 22:13
2017/06/15 22:49
2017/06/15 22:59
2017/06/15 23:27
2017/06/16 00:03
2017/06/16 02:11
2017/06/16 02:33 編集
2017/06/16 02:30
2017/06/16 02:34
2017/06/16 05:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。