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)を同時に利用した場合に、描画が上書かれる問題が解消されました。
問題が発生するケースも残ってはいるようです(詳細はこちら)。