質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1280閲覧

レイアウト

daichanman123

総合スコア32

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/09/16 04:50

レイアウトについてわからない点があるので質問させていただきます。

コード JPanel panel1; JLabel label1; JButton button1, button2; public static void main(String args[]){ MainFrame frame = new MainFrame("ジャンケンゲーム"); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public MainFrame(String title){ setTitle(title); panel1 = new JPanel(); panel1.setLayout(new FlowLayout()); panel1.setPreferredSize(new Dimension(400, 400)); panel1.setBackground(Color.ORANGE); label1 = new JLabel("プレイヤー人数"); button1 = new JButton("1人"); button2 = new JButton("2人"); panel1.add(label1); panel1.add(button1); panel1.add(button2); add(panel1); }

このようにプログラムを作りました。
中央に500×500のフレームは出るのですが、背景のオレンジ色が400×400でなく一面オレンジ色になってしまいます。
なぜこのようになったのかと、どうすれば400×400の部分だけをオレンジ色にできるのかを教えていただきたいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2015/09/16 07:48

画面キャプチャは貼れませんか?
guest

回答2

0

LayoutManagerのほとんどが相対位置でレイアウトするための機能で、ウィンドウや親コンポーネントのサイズを変えても自動的にレイアウトし直してくれたりします。

絶対位置でレイアウトを行うには、LayoutManagerを無効にします。(nullを設定)
setPreferredSizeの同様の理由で使いません。代わりにsetSizeを設定します。

下記の★マークのところを変えてみて下さい。

lang

1// (以上略) 2 3 public MainFrame(String title) { 4 setTitle(title); 5 setLayout(null); // ★追加 6 7 panel1 = new JPanel(); 8 9 panel1.setLayout(new FlowLayout()); 10// panel1.setPreferredSize(new Dimension(400, 400)); 11 panel1.setSize(new Dimension(400, 400)); // ★変更 12 panel1.setBackground(Color.ORANGE); 13 14// (以下略)

投稿2015/09/16 11:26

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Frameへpanelを追加する際に、場所に指定が抜けていることが原因だと思います。
JFrameのデフォルトでは、BorderLayoutなので、コンポーネントをaddで追加する際に、場所を指定してあげて下さい。

java

1add(panel1,BorderLayout.NORTH);//上部に指定

もしくは、Frameのレイアウトを変更します。

java

1frame.setLayout(new FlowLayout());// frameをFlowLayoutに指定

=== 原因も要求されていたので、追記します。 ===
BorderLayoutで、addの第2引数を指定しなかった場合は、自動的にCENTERが選ばれます。
CENTERは他の場所にコンポーネントを指定しないと、できるだけ自分を広く取ります。今回の場合は、フレーム内に他のコンポーネントが存在しないため、一面に広がってしまっています。

投稿2015/09/16 08:52

編集2015/09/16 09:05
shanxia

総合スコア1038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問