- PR -

Swingにおける画像の表示

1
投稿者投稿内容
CameField
会議室デビュー日: 2004/09/20
投稿数: 11
投稿日時: 2004-11-04 21:36
Swingを用いてプログラムを書いています。
現在、JLabelに画像を貼り付けて表示しているのですが、その上にJButtonを表示しようとしても、JLabelに隠れてしまい、JButtonが表示されません。
これは、何か設定をすることにより、JButtonの方を上に表示させることは出来るのでしょうか。
また、paint()の中でdrawImage()を使って画像を表示させると、JButtonを表示することは出来るのですが、ウィンドウを動かしたときに画像がちらついてしまうため、この方法は取っていません。

どのようにすれば、画像の上にボタンを表示させることが出来るのでしょうか。
よろしくお願いします。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-11-05 00:28
CameFieldさん、こんにちは。

うまくやれば、JLabelのオブジェクト上に JButtonのオブジェクト
を表示させることはできます。

しかしボタンに画像を表示させれば、無理に両者を重ねる必要は
無いと思います。

javax.swing.JButton(Icon icon) を使えば、画像付きのボタンを
作れますよ。(ご存知だったかも知れませんが。)
CameField
会議室デビュー日: 2004/09/20
投稿数: 11
投稿日時: 2004-11-05 01:31
返信ありがとうございます。

少し説明不足だったのですが、JLabelに地図の画像を貼り付けて表示させてあり、
その上に画像つきのボタンを表示させたいと思っています。
そのため、どうしても画像の上にボタンを表示させたいのです。

今のところ、画像付きラベルと画像付きボタンを作成することは出来ています。
しかし、setLayout(null)とsetBounds(・・・)を使って、ラベルの上にボタンを配置しようとすると、ボタンがラベルに隠れてしまうのです。

>うまくやれば、JLabelのオブジェクト上に JButtonのオブジェクト
 を表示させることはできます。

どのようにすれば可能なのでしょうか。
よろしくお願いします。
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-05 04:07
そもそもJLabelじゃなきゃダメなものなのでしょうか?
JPanelなどの格納用コンポーネントに画像を背景として描画し、その上に
JButtonなりの部品を配置する方法が自然な気がするのですけどね。。。

取り敢えず、質問が「JLabel上に」という事なのでそれで話しを進めます。
おそらくは javax.swing.JLabelのコンストラクタでImageIconを渡して
いるのではないかと思いますが、これを止めてsetIcon()で設定してみて
下さい(add()でJButtonを配置した後で)

Icon btn_icon, label_icon; //アイコンの取得は省略。
int x,y,w,h; //配置位置、サイズ。代入省略。
JLabel label = new JLabel();
JButton button = new JButton(btn_icon);
label.setLayout(null);
label.add(button);
button.setBounds(x,y,w,h);
label.setIcon(label_icon);

これが全ての環境で上手くいくものかどうか分かりませんが、
取り敢えず試しにやってみて下さい。
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-05 04:58
訂正です。。。

その後、JLabelのコンストラクタ引数にアイコンを指定したやり方で
やってみても問題なく動作しました。。。汗

さっきは、CameFieldさんと同様のJButtonが非表示という状態だったのですが、、
恐らくは単純な記述ミスかなんかだったものと思われます、汗。

CameFieldさんも単純な記述ミスかなんかではないのかなぁ。。。
宜しければ再現可能なソースを載せていただけると助かるのですが。。。
なんか狐につままれたようで、変な気分だなァw
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-11-05 09:36
引用:

今のところ、画像付きラベルと画像付きボタンを作成することは出来ています。
しかし、setLayout(null)とsetBounds(・・・)を使って、ラベルの上にボタンを配置しようとすると、ボタンがラベルに隠れてしまうのです。


JLayeredPane は使ってる?
CameField
会議室デビュー日: 2004/09/20
投稿数: 11
投稿日時: 2004-11-06 00:15
返信ありがとうございます。

ラベルの上にボタンが表示できなかった問題ですが、解決できました。
Containerの上にラベルもボタンも表示していたのが問題でした。
JLabelの上にボタンを追加したら、ちゃんと表示されました。
Java初心者なので、JLabelにaddできるとは知りませんでした。
これから、いろいろと応用できそうです。

いろいろとアドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)