TITLE:Nimbusの外観をUIDefaultsで変更する
#navi(../)
#tags(NimbusLookAndFeel, UIDefaults, Painter)
RIGHT:Posted by &author(aterai); at 2013-05-27
*Nimbusの外観をUIDefaultsで変更する [#a6384418]
``NimbusLookAndFeel``の外観を``UIDefaults``を使って部分的に変更します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(https://lh4.googleusercontent.com/-iuOm0KmZLK4/UaIp6IGdL4I/AAAAAAAABso/TUvbvWNNQuI/s800/UIDefaultsOverrides.png)

**サンプルコード [#a62f5e3a]
#code(link){{
UIDefaults d = new UIDefaults();
d.put("TextArea.borderPainter", new Painter() {
  @Override public void paint(Graphics2D g, Object o, int w, int h) {}
});
MultiLineTableCellRenderer r = new MultiLineTableCellRenderer();
r.putClientProperty("Nimbus.Overrides", d);
r.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
}}

**解説 [#jeead6dc]
- ``JCheckBoxMenuItem``
-- ``CheckBoxMenuItem[Enabled].checkIconPainter``, ``CheckBoxMenuItem[MouseOver].checkIconPainter``, ``CheckBoxMenuItem[Enabled+Selected].checkIconPainter``, ``CheckBoxMenuItem[MouseOver+Selected].checkIconPainter``の``Painter``(これらの状態を独自に描画)を置き換えた``UIDefaults``を作成し、``putClientProperty("Nimbus.Overrides", d);``を使って上書き
- ``JTextArea``
-- ``JTable``の``TableCellRenderer``に``JTextArea``を使用してセル内に複数行の文字列を表示([[JTableのセルの高さを自動調整>Swing/AutoWrapTableCell]])
-- ``NumbusLookAndFeel``では、``JScrollPane``内にない``JTextArea``には``Border``が表示されるので、これを非表示にするために``TextArea.borderPainter``で使用する``Painter``を置き換えた``UIDefaults``を作成し、``JTextArea``のデフォルトを``putClientProperty("Nimbus.Overrides", d);``を使って上書き
--- ``UIManager.getBorder("Table.focusCellHighlightBorder")``を使うと、なぜか一番左上のセルのフォーカスが表示されない
-- ``TextArea.NotInScrollPane``の``State#isInState(...)``をオーバーライドして``JScrollPane``内にあるように見せかける方法もある

#code{{
d.put("TextArea.NotInScrollPane", new State("NotInScrollPane") {
  @Override protected boolean isInState(JComponent c) {
    //@see javax.swing.plaf.nimbus.TextAreaNotInScrollPaneState
    //return !(c.getParent() instanceof JViewport);
    return false;
  }
});
r.putClientProperty("Nimbus.Overrides", d);
}}

**参考リンク [#e67de264]
- [http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)]
-- ``NimbusLookAndFeel``のプロパティ一覧
- [http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/package-summary.html javax.swing.plaf.nimbus (Java Platform SE 7 )]
-- [http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/NimbusStyle.html NimbusStyle (Java Platform SE 7 )]

**コメント [#ec9b9cab]
#comment