JDialog オリジナルのダイアログの使用するために用意されているGUI部品です。
そのためJFrameクラスと実装方法や設定項目は同じです。
モーダル
JDialogクラスのダイアログが表示されているときにダイアログを閉じなければダイアログ以外からのイベント処理を実行できないことを「モーダル」その逆を「非モーダル」といいます。
コンストラクター
JDialogクラスで用意されているコンストラクターは16種類とあまりにも多くそして必要なさそうなものが半分くらいあったので以下の3つぐらいを覚えておくぐらいで良いでしょう。
・JDialog(Frame owner)
・JDialog( Frame owner , String title)
・JDialog( Frame owner , boolean modal)
・JDialog( Frame owner , String title ,boolean modal)
引数の説明としてまず、「Frame owner」ですが、呼び出しもとのウィンドウオブジェクトらしいのでthisと指定するだけでいいです。
次に「String title」はタイトルバーに表示するタイトルを設定します。
最後に「boolean modal」はtrueならモーダルに、falseなら非モーダルにダイアログを設定する
*タイトルとモーダルはSETメソッドが用意されているためオブジェクト作成後でも指定可能です。
基本的にレイアウトは自由ですが(setLayoutが使えるため)ダイアログという目的を忘れないためにレイアウトはこんな感じがいいでしょう。
■JFileChooserクラス
このクラスはファイルを読み込んだり保存したりといったことを行うGUI部品です。ファイル読み込み自体は以前にも紹介しましたがあれは存在が確定していることが前提でこれを満たしていないと例外がおきます。
一般的にファイル読み込みはダイアログを開いてディレクトリを調べて読み込みたいファイルをクリックして開く、ファイル保存はダイアログを開いて保存したいディレクトリまでいきファイル名をに入力して(拡張子も指定する)保存ボタンを押すという動作です。
この2つの操作をJavaではJFileChooserクラスによって行われています。
コンストラクターはいろいろ用意されているらしいですがSETメソッド(設定メソッド)が充実しているのでデフォルトコンストラクタでOK
設定メソッド
メソッド名 | 引数 | 説明 |
---|---|---|
setApproveButtonText(String approveButtonText) | ボタンタイトル | ApproveButtonで使用されるテキストを設定 |
setApproveButtonToolTipText(String toolTipText) | 表示文字列 | ApproveButton で使用されるツールヒントテキストを設定 |
setCurrentDirectory(File dir) | デイレクトリパス(File型なので 「new File("d:\\dir\files")」のような感じで指定) | 現在のディレクトリを設定 |
setDialogTitle(String dialogTitle) | タイトル | ウィンドウのタイトルバーに表示される文字列を設定 |
setDialogType(int dialogType) | ダイアログの種類表参照 | ダイアログのタイプを「読み込み」「保存」「カスタム」いずれかに設定 |
setDragEnabled(boolean b) | 可否 | ダイアログ内がドラッグ可能か設定する |
addChoosableFileFilter (FileFilter filter) | 表示できるファイルの種類が設定されているオブジェクト | ユーザーが選択可能なファイルフィルタのリストにフィルタを追加 |
setMultiSelectionEnabled(boolean b) | 可否 | 複数ファイル選択可能か設定する |
ちなみにFileFilter型には FileNameExtensionFilterクラスを使用します。基本的に以下のコンストラクタだけでJFileChooserに必要な機能は用意できます。
FileNameExtensionFilter(String description,String... extensions)
引数1:フィルターに表示するテキスト
引数2:フィルタリングする拡張子の可変長値リスト(1以上の拡張子をカンマ区切りで指定する)
フィールド名 | 設定内容 |
---|---|
OPEN_DIALOG | 「ファイルを開く」ダイアログ |
SAVE_DIALOG | 保存するファイルを選択できるダイアログ |
CUSTOM_DIALOG | カスタムダイアログ |
ほかにもまだまだ設定メソッドがあったのですが管理人が把握している機能(ファイル選択ダイアログの)がごく一般的なものなのでこれぐらいにしました。
今回調べてみたらJavaではこんな風にダイアログの部品を決めているらしいです。

■サンプルプログラム
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GuiDialog extends JFrame {
ImageIcon icon;
public static void main(String [] agr) { new GuiDialog(); }
GuiDialog(){
setTitle("ファイルメニュー");
setBounds(10,10,600,450);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("ファイル");
JMenuItem open = new JMenuItem("開く");
JMenuItem end = new JMenuItem("終了");
menu.add(open);
menu.add(end);
menubar.add(menu);
setJMenuBar(menubar);
ImagePanel p = new ImagePanel();
getContentPane().add(p);
setVisible(true);
open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showFile();
}
});
end.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(1);
}
});
}
/*ファイルダイアログを使用して画像ファイル(JPEG,PNG,GIF)を取得&表示する*/
public void showFile(){
JFileChooser fc = new JFileChooser();
int fd = fc.showOpenDialog(this);
if(fd == JFileChooser.APPROVE_OPTION) {
icon = new ImageIcon(fc.getSelectedFile().getPath());
repaint();
}
}
class ImagePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(icon != null) {
g.drawImage(icon.getImage(), 179, 80 , 250, 250 , this);
}
}
}
}
実行結果
ファイルメニュから「開く」をクリックすると画像選択ダイアログが表示される
今回は画像ファイルを読み込んできるため一般的な画像ファイル(JPEG、GIF,PNG)以外を指定すると何も実行されません。
適当でいいので画像ファイルを選択すると
こんな感じで中央に画像が表示されました。
画像ファイルが用意できない場合はこの写真を使ってください(今回使ったファイルです)
■まとめ
今回と前回でダイアログを取り上げましたが管理者の中ではダイアログの実装の難しさは「C# < Java < Android」だと考えてています。
(C#はプロパティ項目が少ない点とデザインしやすさから、Androidは状態遷移や推奨項目外のものもおおいことから)
前々回やったメニュとダイアログは他の部品から独立している部品なので管理人的には「目次」ぐらいの扱いで使用しています。
今後の予定としては次回「JTable」を紹介してJava言語を終了します。
それ以降ではAndroidを中心に「MySQL」や「SQLite」の分野にしようかな~と感じています。