Nimbusの外観をUIDefaultsで変更する
Total: 5648, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
NimbusLookAndFeelの外観をUIDefaultsを使って部分的に変更します。
Screenshot

Advertisement
Source Code Examples
UIDefaults d = new UIDefaults();
d.put("TextArea.borderPainter", new Painter<JComponent>() {
@Override public void paint(Graphics2D g, JComponent c, int w, int h) {
/* Empty painter */
}
});
MultiLineTableCellRenderer r = new MultiLineTableCellRenderer();
r.putClientProperty("Nimbus.Overrides", d);
r.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
View in GitHub: Java, KotlinDescription
JCheckBoxMenuItemCheckBoxMenuItem[Enabled].checkIconPainter、CheckBoxMenuItem[MouseOver].checkIconPainter、CheckBoxMenuItem[Enabled+Selected].checkIconPainter、CheckBoxMenuItem[MouseOver+Selected].checkIconPainterのPainter(これらの状態を独自に描画)を置き換えたUIDefaultsを作成し、putClientProperty("Nimbus.Overrides", d)を使用して上書き
JTextAreaJTableのTableCellRendererにJTextAreaを使用してセル内に複数行の文字列を表示NimbusLookAndFeelではJTextAreaがJScrollPane内に配置されていない場合Borderが表示されるので、これを非表示にするためにTextArea.borderPainterで使用するPainterを置き換えたUIDefaultsを作成し、JTextAreaのデフォルトをputClientProperty("Nimbus.Overrides", d)を使って上書きUIManager.getBorder("Table.focusCellHighlightBorder")を使うとなぜか一番左上のセルのフォーカスが表示されない
TextArea.NotInScrollPaneのState#isInState(...)をオーバーライドしてJScrollPane内にあるように見せかける方法もある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);
Reference
- Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
NimbusLookAndFeelのプロパティ一覧
- javax.swing.plaf.nimbus (Java Platform SE 8)