Swing/FontChange のバックアップ(No.24)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
- title: UIManagerで使用するFontを統一 tags: [UIManager, Font] author: aterai pubdate: 2003-10-27 description: Swingの各種コンポーネントで使用する全てのフォントを一気に変更します。
概要
Swing
の各種コンポーネントで使用する全てのフォントを一気に変更します。
Screenshot
Advertisement
サンプルコード
private void updateFont(final Font font) {
FontUIResource fontUIResource = new FontUIResource(font);
for (Map.Entry<?, ?> entry: UIManager.getDefaults().entrySet()) {
if (entry.getKey().toString().toLowerCase().endsWith("font")) {
UIManager.put(entry.getKey(), fontUIResource);
}
}
//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
(フォントの変更)を除外しています。
全部のコンポーネントではなく、例えばテーブルのフォントだけ変更したい場合は以下のように設定します。
UIManager.put("Table.font", new FontUIResource(font));
UIManager
から、UIDefaults
のキー一覧を作るなどして、いろいろ検索してみてください。
//キー一覧の作成例
import java.util.Map;
import javax.swing.UIManager;
class Test {
public static void main(String[] args) {
//for (Object o:UIManager.getDefaults().keySet()) //は、うまくいかない?
//for (Object o:UIManager.getLookAndFeelDefaults().keySet())
for (Map.Entry<?, ?> entry: UIManager.getDefaults().entrySet())
System.out.println(entry.getKey());
}
}
Metal
で使用されているフォントが気に入らないだけなら、システムLookAndFeel
を使用するか、Metal
でボールドフォントを無効にするなどの方法があります。
MetalLookAndFeel
ではなく、SystemLookAndFeel
を使用する
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace();
}
MetalLookAndFeel
で、bold fonts
を無効にする場合
UIManager.put("swing.boldMetal", Boolean.FALSE);
JComboBox#setFont
をしても、JComboBox
自体のサイズが更新されない
combo.setFont(font);
//以下回避方法
combo.setPrototypeDisplayValue(null); //null:default?
//or combo.firePropertyChange("prototypeDisplayValue",0,1); //0,1:dummy
特定のインスタンスだけ、LookAndFeel
などを変更しても常に独自のフォントを設定したい場合、JComponent#updateUI()
をオーバーライドして設定する方法もあります。
JLabel label = new JLabel() {
@Override public void updateUI() {
super.updateUI();
setFont(...);
}
};