2009年6月29日

Swing♪Swing♪Swing♪

Filed under: 技術メモ — maccha @ 23:46

ここは、ひよっこプログラマのブログですよ!
というわけで、たまには技術的なメモを残しておくのであった。

エントリのタイトル見て分かるとおり、Java Swingのお話。
バージョンは、1.5.0である。

JLabelの背景色がつかない

JLabelにsetBackgroundしてるのに、色がつかないよ(´・ω・`)という場合。
背景色の透明・不透明を設定する関数setOpaqueで設定が必要。
setOpaque(true)をすると、不透明になって設定した色が塗られる。

JFrameのcontentPaneにaddしたJPanelの大きさが変わらない

JFrameのcontentPaneにaddしたJPanelの大きさが変わらない(´・ω・`)
setSizeしても、setPreferredSizeしても、setBoundsしても変わらない(´・ω・`)
もちろん、setLayout(null)なんだけどなぁ…。位置もサイズも指定している(´・ω・`)
そんなときの対処法。

とりあえず、contentPaneからremoveする。
そして、新しいJPanel作ってaddする。
ちゃんと、JFrameをsetVisible(true)する。←大事っぽい

setVisible(true)しておかないと、新しいJPanelが反映されないぽい?
removeしている時点でVisibleがfalseになってるのか?(後で調べる)
とにかく、setVisible(true)しないといかん。

対処法な感じなので、何故そうなるのかがわかっていない。ソース見ればわかるかな。(後で見る)
もしもご存知の方は是非ご一報を。

3件のコメント »

  1. JFrame f = new JFrame();
    f.getContentPane().setLayout(null);
    JPanel p = new JPanel();
    p.setOpaque(true);
    p.setSize(100,100);
    p.setBackground(Color.RED);
    f.getContentPane().add(p);
    f.setVisible(true);
    でできましたよ?

    1. revalidateしてみては?
    2. どのスレッドやってるか確認して、イベントディスパッチスレッドじゃなければinvokeLaterでやってみては?

    コメント by hide-t — 2009年6月30日 @ 20:32

  2. コメントありがとうございます! そして、説明不足でごめんなさい。
    hide-tさんが言うところはOKなのですが、
    f.setVisible(true);
    の後に
    p.setSize(200, 200);
    しても、変化がないなーってことだったのです。わかりにくてすみません。

    教えていただいた1と2についてよくわかってないので、調べてみます><

    コメント by maccha — 2009年7月2日 @ 00:38

  3. 直感ではダブルバッファとレイアウトマネージャが無いせいではないかと。

    コメント by hide-t — 2009年7月4日 @ 13:40

TrackBack URL :

コメントする


Copyright (c) 2007- 真夜中の色彩 All Right Reserved.