Javaプログラミング/Javaプログラミング関連情報

ダイアログを使おう!(3ページ目)

今回は、Swingに標準で用意されている各種のダイアログの利用について説明しましょう。

執筆者:掌田 津耶乃

カラーダイアログを使う


続いて、色を選択するのに用いられる「カラーダイアログ」を使ってみましょう。これは、「JColorChooser」というクラスとして用意されています。これをダイアログとして呼び出し利用するのは、実は非常に簡単です。単に「showDialog」というメソッドを呼び出し、返されたColorを受け取るだけなのです。

public void clickBtn(){
Color c = JColorChooser.showDialog(this, "色を選択して!", Color.RED);
label.setText(c.toString());
this.getContentPane().setBackground(c);
}

ダイアログから色を選択して閉じると、ウインドウの背景色が変わる。

clickBtnを、ちょっと書き換えてみました。まず、「JColorChooser.showDialog」でダイアログを呼び出します。引数が3つありますが、これは「属するコンポーネント」「表示するメッセージ」「初期値のColor」をそれぞれ指定します。

たったこれだけで、画面にカラーダイアログが現れます。そして、選択した色は、そのままColorインスタンスとして返されます。実に安直!

ウインドウとして表示するには?


が、このカラーダイアログというのは、ダイアログではなく、普通のウインドウとして利用することが多くなってきました。ダイアログではなく普通のウインドウとして利用するにはどうすればよいのでしょうか。実際にやってみましょう。

// import javax.swing.colorchooser.ColorSelectionModel;

public void clickBtn(){
JColorChooser chooser = new JColorChooser();
chooser.getSelectionModel().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
changeColor(e);
}
});
JFrame frame = new JFrame("Color Chooser");
frame.add(chooser,BorderLayout.CENTER);
frame.setSize(new Dimension(300,300));
frame.setVisible(true);
}

public void changeColor(ChangeEvent e){
ColorSelectionModel model = (ColorSelectionModel)e.getSource();
Color c = model.getSelectedColor();
label.setText(c.toString());
this.getContentPane().setBackground(c);
}

ここでは、ボタンクリックの際のclickBtnメソッドの修正の他、色を選択したときのイベント処理で使うメソッド「changeColor」を新たに用意しました。また、javax.swing.colorchooser.ColorSelectionModelをimportしておく必要があります。

このJColorChooserというのは、実は「JComponent」のサブクラスなのです。つまり、コンポーネントなんですね。ですから、JFrameインスタンスを用意してaddしてやれば、そのままウインドウにカラーダイアログ(ダイアログではありませんから、カラーチューザーですね)が表示されます。ただし、ダイアログの場合と違って、ダイアログを閉じるためのボタン類などは表示されません。

問題は、このJColorChooserで色を選択したときに、どうやってその処理を呼び出すようにするか、ということでしょう。これにはいろいろ方法は考えられますが、色を管理する「モデルクラス」に、状態変更のイベント処理を組み込んでおく、というのが一番わかりやすいでしょう。

Swingでは、データの管理に「モデルクラス」というものを使うことがあります。前に、JListやJTableの説明をしたときにも登場しましたね。このJColorChooserでも、色の管理をするのにモデルクラスが使われます。

ここでは、「ColorSelectionModel」というクラスを利用しています。これは、JColorChooserの「getSelectionModel」というメソッドで得られるもので、色の選択を管理するモデルクラスです。このColorSelectionModelにある「getSelectedColor」というメソッドを使うことで、選択されている色を簡単に取り出すことができます。

このColorSelectionModelには、選択状態が変化したときに発生するChangeEventというイベントが用意されており、「ChangeListener」というイベントリスナーを使ってそのイベント処理を組み込むことができるようになっています。このイベントリスナーには、stateChangedというメソッドが用意されており、ここに選択状態が変わったときの処理を記述します。サンプルを見て下さい。

chooser.getSelectionModel().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
changeColor(e);
}
});

このようにして、addChangeListenerでgetSelectionModelされたColorSelectionModelにイベントリスナーを組み込んでいますね。そして、stateChangedで、色を変更したらchangeColorというメソッドを呼び出すようにしていた、というわけです。
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます