倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

JColorChooser の使い方がもどかしいくらい分かりにくい!?

前回 JFileChooser の使い方を見ましたが、JFileChooser やったら次は JColorChooser でしょっ!ってことで JColorChooser の使い方を見ていこうかと。

参考 URL:

JColorChooser って、名前が JFileChooser に似てるので使い方も同じようなものかと思ってたら、なんか全然感じが違うのでちょっと戸惑い。 カスタマイズせずに使う分には showDialog() メソッドを使えば良いようですが、JFileChooser と違ってこれは static メソッドなのが要注意。 JFileChooser というより JOptionPane に近い API のようです。 JColorChooser のインスタンスを使用するサンプルは面倒そうなのでスルー(Groovy のサンプルで少し触れますが)。

まぁ、とりあえず JColorChooser がどんなのか見ておきましょう。 JColorChooser にはデフォルトで次の3つの選択方法が用意されてます:


各選択方法はタブによって切り替えられます。 まぁ、スタンダードな色選択ですね。

サンプルコード


では、サンプルコード。

Java

まずは Java コード。 普通に使う分には JColorChooser の static メソッド showDialog() を呼び出すだけです。

import java.awt.Color;
import javax.swing.JColorChooser;

JFrame parent = ...;

Color color = JColorChooser.showDialog(parent, "JColorChooser", Color.WHITE);
if(color != null){
    System.out.println(color);
}
  • 第1引数は親コンポーネント。 null でも OK。
  • 第2引数はダイアログのタイトル。
  • 第3引数は初期選択の色。
  • 返り値の Color オブジェクトは選択された色に対応する Color オブジェクトです。 キャンセルされたりダイアログが×で閉じられたりした場合は null が返されます。

Groovy + SwingBuilder

次は Groovy コード。 といっても showDialog() メソッドが static なので、あまり Java コードに比べて簡単になりません:

import java.awt.Color
import javax.swing.JColorChooser

def parent = ...

def color = JColorChooser.showDialog(parent, 'JColorChooser', Color.WHITE)
if(color != null){
    println color
}

Groovy + SwingBuilder 〜埋め込み編〜

上記のGroovy の例ではちょっと寂しいので、Groovy の別のサンプル。 JColorChooser は JComponent のサブクラスなので、普通に JPanel や JFrame に埋め込むことができます。 なので、JFrame に JColorChooser を埋め込んで表示させるサンプルを見てみましょう。 このときは JColorChooser のインスタンス化が必要なので、SwingBuilder に対して colorChooser() を呼び出してます。

import groovy.swing.SwingBuilder
import javax.swing.JFrame
import javax.swing.event.ChangeListener

def builder =  new SwingBuilder()
def frame = builder.frame(
        title:'JColorChooser',
        size:[500, 400],
        defaultCloseOperation:JFrame.EXIT_ON_CLOSE){
    colorChooser(id:'cc')
}

builder.cc.selectionModel.addChangeListener({ evt ->
    println evt.source.selectedColor
} as ChangeListener)

frame.visible = true

この埋め込みのサンプルでは、「了解」、「キャンセル」などのボタンは表示されない(これらは JColorChooser の一部でない)ので、大抵の場合、別途 ChangeListener を加える必要があります。

ちなみに 前回触れませんでしたが、SwingBuilder に対して fileChooser() を呼び出せば JFileChooser も同様に埋め込むことができます。 

3rd パーティ製の Look & Feel


JColorChooser は 3rd パーティ製の Look & Feel で独自のものをサポートしてくれてるものもあるようで、たとえば Substance の Look & Feel を用いると、こんな JColorChooser が使えます:

な!? なんだ?この完成度!! デフォルトの JColorChooser が子供のオモチャに見える!
Java Swing Hacks ―今日から使える驚きのGUIプログラミング集

Java Swing Hacks ―今日から使える驚きのGUIプログラミング集