Java SE 7 における Swing の変更点

Swing Enhancements in Java SE 7 の一覧をベースに Java SE 7 の Swing 変更点について書いときます。。

JLayer Class

java.net. の JxLayer プロジェクトの成果物を元に Java 7 にレイヤー機能が追加されました。既存のコンポーネントを変更することなく、レイヤーを追加してUIを装飾することができます。javax.swing.JLayer クラスでレイヤーを追加するくらすをラップし、 javax.swing.plaf.LayerUI クラスにてレイヤーの描画を行います。

JFrame f = new JFrame();

JPanel panel = createPanel();
LayerUI<JPanel> layerUI = new MyLayerUISubclass();
JLayer<JPanel> jlayer = new JLayer<JPanel>(panel, layerUI);

f.add (jlayer);
class MyLayerUISubclass extends LayerUI<JComponent> {
  @Override
  public void paint(Graphics g, JComponent c) {
    super.paint(g, c);
    // レイヤーの描画
  }
}

例えばこのようなスポットライト風のレイヤーでコンポーネントを装飾できます。


Nimbus Look & Feel

Java 6 から使えるようになった Nimbus Look & Feel ですが、com.sun.java.swing から標準名前空間である javax.swing.plaf.nimbus にパッケージが異動されました。
Nimbus のUIはこんな感じになります。


Heavyweight and Lightweight Components

Heavyweight コンポーネント(AWT の Button や Label)と Lightweight コンポーネント(Swing の JButton や JLabel)を同時に利用した場合に、描画が上書かれる問題が解消されました。

問題が発生するケースも残ってはいるようです(詳細はこちら)。


Shaped and Translucent Windows

半透明ウインドウと非矩形のウインドウがサポートされました。正確には Java SE 6 Update 10 からのサポートとなりますが、AWTUtilities で提供されていたメソッドがしかるべきクラスに移動されています。
以前は SWT(Standard Widget Toolkit) で対応していたのですが、ようやく、いまさら の対応です。
例えば、こんな感じの半透明の三角定規のようなウインドウが作成できます。

チュートリアルはこちら


Hue-Saturation-Luminance (HSL) Color Selection in JColorChooser Class

JColorChooserが拡張されました。以下見たままです。

Java6の場合


Java7の場合