Swing/UIDefaultsOverrides のバックアップ(No.13)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/UIDefaultsOverrides へ行く。
- 1 (2013-05-27 (月) 01:49:34)
- 2 (2013-05-28 (火) 03:31:30)
- 3 (2013-05-28 (火) 20:34:44)
- 4 (2014-05-22 (木) 14:34:55)
- 5 (2014-06-24 (火) 20:34:32)
- 6 (2014-11-08 (土) 01:17:29)
- 7 (2015-12-08 (火) 16:09:59)
- 8 (2016-06-24 (金) 16:34:05)
- 9 (2016-08-12 (金) 17:22:35)
- 10 (2017-04-04 (火) 14:13:45)
- 11 (2017-04-04 (火) 14:17:08)
- 12 (2017-10-04 (水) 18:25:48)
- 13 (2019-04-05 (金) 16:02:29)
- 14 (2020-07-02 (木) 04:21:55)
- 15 (2021-12-04 (土) 09:27:01)
- 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);
を使用して上書き
JTextArea
JTable
のTableCellRenderer
にJTextArea
を使用してセル内に複数行の文字列を表示(JTableのセルの高さを自動調整)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);
参考リンク
- 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)