TITLE:Nimbusの外観をUIDefaultsで変更する

Posted by at 2013-05-27

Nimbusの外観をUIDefaultsで変更する

`NimbusLookAndFeelの外観をUIDefaults`を使って部分的に変更します。

  • &jnlp;
  • &jar;
  • &zip;
UIDefaultsOverrides.png

サンプルコード

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);
View in GitHub: Java, Kotlin

解説

  • `JCheckBoxMenuItem`
    • `CheckBoxMenuItem[Enabled].checkIconPainter, CheckBoxMenuItem[MouseOver].checkIconPainter, CheckBoxMenuItem[Enabled+Selected].checkIconPainter, CheckBoxMenuItem[MouseOver+Selected].checkIconPainterPainter(これらの状態を独自に描画)を置き換えたUIDefaultsを作成し、putClientProperty("Nimbus.Overrides", d);`を使って上書き
  • `JTextArea`
    • `JTableTableCellRendererJTextArea`を使用してセル内に複数行の文字列を表示(JTableのセルの高さを自動調整)
    • `NumbusLookAndFeelでは、JScrollPane内にないJTextAreaにはBorderが表示されるので、これを非表示にするためにTextArea.borderPainterで使用するPainterを置き換えたUIDefaultsを作成し、JTextAreaのデフォルトをputClientProperty("Nimbus.Overrides", d);`を使って上書き
      • `UIManager.getBorder("Table.focusCellHighlightBorder")`を使うと、なぜか一番左上のセルのフォーカスが表示されない

参考リンク

コメント