Swing/FontChange のバックアップ(No.37)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FontChange へ行く。
- 1 (2006-04-16 (日) 01:31:01)
- 2 (2006-05-31 (水) 10:35:06)
- 3 (2006-09-12 (火) 16:14:39)
- 4 (2006-09-12 (火) 17:24:39)
- 5 (2007-05-16 (水) 13:59:35)
- 6 (2007-05-16 (水) 15:08:34)
- 7 (2007-12-10 (月) 20:43:41)
- 8 (2009-02-27 (金) 12:42:04)
- 9 (2009-11-03 (火) 00:08:46)
- 10 (2009-12-08 (火) 13:02:22)
- 11 (2010-11-20 (土) 06:25:08)
- 12 (2013-02-26 (火) 14:50:19)
- 13 (2013-02-26 (火) 16:10:01)
- 14 (2013-05-25 (土) 09:12:49)
- 15 (2013-05-26 (日) 00:51:21)
- 16 (2013-05-26 (日) 05:28:25)
- 17 (2013-05-26 (日) 07:09:46)
- 18 (2013-08-16 (金) 16:16:14)
- 19 (2013-08-17 (土) 15:29:42)
- 20 (2013-09-24 (火) 21:09:06)
- 21 (2014-11-01 (土) 00:46:09)
- 22 (2014-12-30 (火) 15:30:23)
- 23 (2015-01-28 (水) 15:05:15)
- 24 (2015-03-03 (火) 14:16:05)
- 25 (2015-03-07 (土) 15:37:42)
- 26 (2016-05-24 (火) 22:22:12)
- 27 (2016-05-25 (水) 13:04:44)
- 28 (2017-03-28 (火) 15:08:00)
- 29 (2017-03-30 (木) 14:05:52)
- 30 (2017-03-31 (金) 16:08:14)
- 31 (2017-04-04 (火) 14:17:08)
- 32 (2017-04-07 (金) 13:51:51)
- 33 (2017-08-15 (火) 14:38:03)
- 34 (2017-11-02 (木) 15:34:40)
- 35 (2018-08-24 (金) 13:57:50)
- 36 (2019-10-18 (金) 17:41:27)
- 37 (2021-05-20 (木) 07:49:53)
- 38 (2022-08-20 (土) 22:15:25)
- 39 (2024-02-15 (木) 20:22:19)
- category: swing folder: FontChange title: UIManagerで使用するFontを統一 tags: [UIManager, Font] author: aterai pubdate: 2003-10-27 description: Swingの各種コンポーネントで使用する全てのフォントを一気に変更します。 image:
概要
Swing
の各種コンポーネントで使用する全てのフォントを一気に変更します。
Screenshot
Advertisement
サンプルコード
private void updateFont(final Font font) {
FontUIResource fontUIResource = new FontUIResource(font);
// for (Map.Entry<?, ?> entry: UIManager.getDefaults().entrySet()) {
UIManager.getLookAndFeelDefaults().forEach((key, value) -> {
if (key.toString().toLowerCase(Locale.ENGLISH).endsWith("font")) {
UIManager.put(key, fontResource);
}
});
// SwingUtilities.updateComponentTreeUI(this);
recursiveUpdateUI(this);
frame.pack();
}
private void recursiveUpdateUI(JComponent p) {
for (Component c: p.getComponents()) {
if (c instanceof JToolBar) {
continue;
} else if (c instanceof JComponent) {
JComponent jc = (JComponent) c;
jc.updateUI();
if (jc.getComponentCount() > 0) {
recursiveUpdateUI(jc);
}
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ツールバーのボタンでコンポーネントが使用するフォントを切り替えています。ただしツールバーだけは、UI
のupdate
(フォントの変更)を除外しています。
- 全コンポーネントではなく、例えば
JTable
のフォントだけ変更したい場合はTable.font
をキーにして以下のように設定するUIManager.put("Table.font", new FontUIResource(font));
- 各コンポーネントのキーは、
UIManager
からUIDefaults
のキー一覧が作成可能// キー一覧の作成例 import javax.swing.UIManager; class Test { public static void main(String[] args) { UIManager.getLookAndFeelDefaults().forEach((key, value) -> System.out.println(key)); } }
MetalLookAndFeel
で使用されているボールドフォントは、以下のように変更可能- MetalLookAndFeelで太字フォントを使用しない
UIManager.put("swing.boldMetal", Boolean.FALSE);
- MetalLookAndFeelで太字フォントを使用しない
JComboBox#setFont(...)
で使用するフォントのサイズを変更しても、JComboBox
自体のサイズが更新されない- JCombobox doesn't get resized according to font size change
combo.setFont(font); // 以下回避方法 combo.setPrototypeDisplayValue(null); // null:default? // or combo.firePropertyChange("prototypeDisplayValue", 0, 1); // 0, 1:dummy
- JCombobox doesn't get resized according to font size change
特定のインスタンスだけ、LookAndFeel
などを変更しても常に独自のフォントを設定したい場合、JComponent#updateUI()
をオーバーライドして設定する方法もあります。
JLabel label = new JLabel() {
@Override public void updateUI() {
super.updateUI();
setFont(...);
}
};