Swing/UIDefaultsOverrides のバックアップの現在との差分(No.10)
- category: swing folder: UIDefaultsOverrides title: Nimbusの外観をUIDefaultsで変更する tags: [NimbusLookAndFeel, UIDefaults, Painter] author: aterai pubdate: 2013-05-27T01:49:34+09:00 description: NimbusLookAndFeelの外観をUIDefaultsを使って部分的に変更します。 image:
概要
NimbusLookAndFeel
の外観をUIDefaults
を使って部分的に変更します。
Screenshot
Advertisement
サンプルコード
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, Kotlin解説
JCheckBoxMenuItem
-
CheckBoxMenuItem[Enabled].checkIconPainter
,CheckBoxMenuItem[MouseOver].checkIconPainter
,CheckBoxMenuItem[Enabled+Selected].checkIconPainter
,CheckBoxMenuItem[MouseOver+Selected].checkIconPainter
のPainter
(これらの状態を独自に描画)を置き換えたUIDefaults
を作成し、putClientProperty("Nimbus.Overrides", d);
を使って上書き -
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のセルの高さを自動調整) -
NimbusLookAndFeel
では、JTextArea
がJScrollPane
内に配置されていない場合、Border
が表示されるので、これを非表示にするためにTextArea.borderPainter
で使用するPainter
を置き換えたUIDefaults
を作成し、JTextArea
のデフォルトをputClientProperty("Nimbus.Overrides", d);
を使って上書き-
UIManager.getBorder("Table.focusCellHighlightBorder")
を使うと、なぜか一番左上のセルのフォーカスが表示されない
-
-
JTable
の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);
// @see javax.swing.plaf.nimbus.TextAreaNotInScrollPaneState
// return !(c.getParent() instanceof JViewport);
return false;
}
});
r.putClientProperty("Nimbus.Overrides", d);
参考リンク
- Nimbus Defaults (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)
- 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)
- javax.swing.plaf.nimbus (Java Platform SE 8)