回答編集履歴
1
誤記訂正
answer
CHANGED
@@ -29,15 +29,15 @@
|
|
29
29
|
}
|
30
30
|
```
|
31
31
|
|
32
|
-
申し訳ないですが質問のコードとはクラス構成が異なっており、メインクラスはJFrameの派生でありメイン画面の定義処理はmainメソッドではなくMyFrameクラスのコンストラクターでやっている点が若干比較しずらい
|
32
|
+
申し訳ないですが質問のコードとはクラス構成が異なっており、メインクラスはJFrameの派生でありメイン画面の定義処理はmainメソッドではなくMyFrameクラスのコンストラクターでやっている点が若干比較しずらいですが、自分がポイントであると思う処理の違いは(1),(2)ですのでとりあえずはそこに注目してください。
|
33
33
|
|
34
34
|
|
35
35
|
(1) コンポーネントのレイアウト(位置と大きさ)
|
36
|
-
swing前提でのゲームのコード
|
36
|
+
特にswing前提でのゲームのコードで、普通のレイアウト機構を用いずに標準的とはいえない方法で(つまり自前で各々のコンポーネントのレイアウトを明示する方針で)書いたコードをよく見かける気がします。ご質問のコードもその傾向にあると思います。少なくとも自分にはそのようなコードを見たとき、正しくレイアウトできているかどうか分かりづらく感じます。普通のレイアウト機構とは「レイアウト制約を宣言的に指定し、実際のリサイズや配置はレイアウトマネージャーに任せる」「初期レイアウトはJFrame#packにより行う」といった点を指します。
|
37
37
|
|
38
38
|
そんなわけで、「平易なレイアウト方式に改める」のが一番よい対処という気がしますが、それはそれでなかなか大事かも知れません。そこで・・・
|
39
39
|
|
40
|
-
とりあえず**何もコンテントが出ないという状況は`JFrame#pack`を呼び出せば解消できます**。
|
40
|
+
とりあえず**何もコンテントが出ないという状況は`JFrame#setVisible`の直前で`JFrame#pack`を呼び出せば解消できます**。コンテントが表示されるようになるので、後は個々のコンポーネントのレイアウトの乱れを修正していくことで期待するレイアウトにもっていけそうです。(実際にいくつか乱れがあるようですが、自分はそれらの原因を指摘できるほどには詳細にコードをみていません。)
|
41
41
|
|
42
42
|
(2) メイン画面へのコンポーネントの追加
|
43
43
|
こちらは現象と直接的な因果関係はありませんが気になるのでコメントします。
|
@@ -52,6 +52,6 @@
|
|
52
52
|
を用いています。こうすると実際にはconstraintsとしてBorderLayout.CENTERが仮定されるので追加自体は行えるのですがあまり行儀がよいコードとは言えない気がします。
|
53
53
|
|
54
54
|
---
|
55
|
-
(1),(2)共通に言えることなのですが、swingに限らず、GUIプログラミング(特にレイアウト)はそもそもの機構が複雑なので、なるべく平易な方法(作法)を知りそれに沿ったコードを書くことが大事な気がします。そうでないとコードを見
|
55
|
+
(1),(2)共通に言えることなのですが、swingに限らず、GUIプログラミング(特にレイアウト)はそもそもの機構が複雑なので、なるべく平易な方法(作法)を知りそれに沿ったコードを書くことが大事な気がします。そうでないとコードを見ても「うまく動くかどうか」がすぐにはわかりづらく(※)、悪くすると動かしてみても原因がつかめないといったことになりがちと思います。何が平易な作法なのかというのは一言で言うのは難しいですが、とりあえず本件でいえば「レイアウトマネージャーにレイアウトをまかせること」というのが自分の意見です。
|
56
56
|
|
57
57
|
※: ちなみに今回のコードを調べるまでは自分は「JFrame#add(Component)を用いたときBorderLayoutがCENTERを仮定する」という事実を知りませんでした。ひょっとしたらこれは常識であって自分が知らなかっただけかも知れませんが・・・
|