こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Java】モーダルDLG内でリストを表示

Javaを学習し始めて間もない初心者です。よろしくお願いします。
========================================
開発環境:Eclipse SDK(Version: 3.5.0)
開発言語:Java
========================================
にて、プログラムを作成しています。
メインDLGの中に配置したボタンを押下したタイミングで、
モーダルDLGを開き、そのDLG内にリストを表示させたいのですが、
参考サイトなどを見ながら、とりあえずモーダルDLGは表示されましたが、
リストが表示されません。
下記に作成ソースを記載しますので、解決法をご存知の方おられましたら、
どこが悪く、どう修正すれば良いかについて、ご教示お願い致します。
なお、当方学習中の身ですので、より良いコードを書くために、
その他の指摘などももしあれば幸いです。

【ソースコード】
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.event.*;
import java.awt.*;

public class TestList extends JFrame implements ActionListener{
Dialog dlg;
Frame frm;

public static void main(String[] args){
TestList frame = new TestList();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 400, 100);
frame.setTitle("リスト表示");
frame.setVisible(true);
}

TestList(){
{
// リスト表示ボタンを追加
JButton btn = new JButton("リストDLGを表示");
btn.addActionListener(this);

JPanel p2 = new JPanel();
p2.add(btn);
getContentPane().add(p2, BorderLayout.CENTER);
}
}
// ボタン押下イベントを取得する関数
public void actionPerformed(ActionEvent e){
// リスト表示ボタンが押下された時
if (frm == null) {
frm = new Frame("リスト");
frm.setSize(200 , 200);
frm.setVisible(true);
String list_n[] = {"テスト1", "テスト2", "テスト3", "テスト4", "テスト5"};
JList list = new JList(list_n);
dlg = new Dialog(frm, "リスト" , true);
JScrollPane sp = new JScrollPane();
sp.getViewport().setView(list);
sp.setPreferredSize(new Dimension(200, 80));

JPanel p = new JPanel();
p.add(sp);

dlg.add(p, BorderLayout.CENTER);
}
}
}

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-08-20 17:07:06

QNo.5222768

暇なときに回答ください

質問者が選んだベストアンサー

よく考えずにいきなりプログラム書いてるから自分でもわからないことになってるんですよ。
自分が何をどう作りたいか一度紙に書いて整理してからプログラムを書くことを奨めます。

変数dlg
 これはリストを格納したダイアログですね。

変数frm
 これが空のフレームです。

空のフレームを表示したくないなら、この変数frmを使わなきゃいいんですよ。
えっ、ダイアログをモーダルにするのにオーナーのFrameが必要?
JavaDocでJFrameの親クラスを確認するといいですよ。

投稿日時 - 2009-08-21 16:01:53

お礼

ご回答ありがとうございます。
JFrameの親クラスがFrameなのですね。
試したところ、frmを用いずに、thisを渡すことで、
dlg = new Dialog(this, "リスト" , true);
にて表示させることが出来ました。

投稿日時 - 2009-08-25 09:54:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

気づいたとこだけ。
・packageがない。(Java5以降はコンパイルエラーになる。)
・TestList()に不要な括弧「{」「}」がある。
・actionPerformedはActionEventを拾うメソッドで、
 このプログラムでは「リストDLGを表示」しかないので
 「actionPerformed呼び出し」=「リスト表示ボタンが押下された時」
 となるが、ActionEventが複数発生する場合などはActionEventクラスの
 getActionCommandメソッドや、getSourceメソッドを使用して場合分け
 するので、普段からやっておいた方が良い。
・frm==nullの場合のみで表示しようとしているが、
 このままだとfrmがnull以外の場合に表示されない。

投稿日時 - 2009-08-21 09:31:28

お礼

ご回答ありがとうございます。
actionPerformed関数内で、どこからのイベントか判断して、
分岐処理をするのですね。参考になります。

投稿日時 - 2009-08-21 11:41:59

ANo.1

dlg.add(p, BorderLayout.CENTER);

の後に

dlg.setSize(100,200);
dlg.setVisible(true);

を追加してみてください。

投稿日時 - 2009-08-20 17:21:03

補足

ご回答ありがとうございます。
追加したところ、リストが表示されたDLGが表示されましたが、
その裏側にも、空のDLGが表示されています。。(図参照)
この空のDLGを表示させずに、リストのDLGのみ表示させるには、
どう修正すれば良いのでしょうか?
重ねての質問申し訳ありませんが、ご回答お願い致します。

投稿日時 - 2009-08-21 11:27:45

あなたにオススメの質問