Dialog Boxを表示する
ユーザIDやpasswordを入力させたい場合などに、JDialog
classを使うと便利です。
下記のcodeは1つ目が、呼び出しもとのwindowで2つ目が呼び出されたDialog-Boxです。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/* JDialog class example
* owner frame
*/
class ExamJdialogFrame {
public static void main(String argv[]) {
JFrame frame = new JFrame();
ExamJdialog exjd = new ExamJdialog(frame);
frame.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
frame.setSize(300,300);
frame.show();
exjd.show();
System.out.println(exjd.getTextValue());
System.out.println(exjd.getButtonValue());
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
*
*/
class ExamJdialog extends JDialog {
int ret_val;
JTextField jtf;
ExamJdialog(JFrame f) {
// super(f, "dispose test"); //non-modal
super(f, "dispose test", true); //modal
jtf = new JTextField();
JButton jb_ok = new JButton("OK");
JButton jb_no = new JButton("NO");
jb_ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
ret_val = 1;
dispose();
}
});
jb_no.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
ret_val = 2;
dispose();
}
});
getContentPane().add("North", jtf);
getContentPane().add("West", jb_ok);
getContentPane().add("East", jb_no);
pack();
}
String getTextValue() {
return jtf.getText();
}
int getButtonValue() {
return ret_val;
}
}
| <operation> dialog boxに入力し、OKボタンもしくはNOボタンを押します。 dialog boxは消去され、コンソール画面に 結果が表示されます。 <実行結果> Dialog Boxがmodalの場合。 コンソールに入力値が表示され、 次の行にOKの場合は1、NOの場合は2が表示されます。 Dialog Boxがnon-modalの場合。 起動直後にコンソールに空白行と、次の行に0と表示されます。 TextFieldに入力し、OKボタンを押しても反応はありません。 |
![]() |
<modalとnon-modal> modal dialogとは、そのdialogの処理が終わらなければ、他のwindowはアクティブに出来ません。 non-modalであれば、そのdialogの処理が終わらなくても、他のwindowの処理が行えます。 コンストラクタの引数でtrueを与えるか、setModal() methodでtrueを与えるとmodalの指定になります。 dialogにmodalを指定すると、dialogのshow() methodを実行したところで、owner frame側の処理が止まります。 dialogがdisposeされると、再び処理がownerに移り、次の処理が実行されます。 (hide methodでも同様だと推定されます。) non-modalの指定であれば、owner frame側の処理は止まらずに実行されるために、sampleのように0が表示されます。 0はint型をメンバ変数で使用したときの初期値です。 dialogはdispose method実行の後でも、そのオブジェクトを扱う(methodを呼び出すなど)ことが可能です。 |
|