のすべてのコンポーネントに特定のフォントを設定したいのですがJPanel
、JPanel に限定されず、より一般的な質問が望ましいです。コンテナー (JFrame または JPanel) 内のコンポーネントのリストにフォントを設定するにはどうすればよいですか?
質問する
13592 次
4 に答える
20
以下は、任意のコンテナの下のコンポーネント ツリー全体に Font を指定できる簡単な方法です (単純なコンポーネントでもかまいません)。
public static void changeFont ( Component component, Font font )
{
component.setFont ( font );
if ( component instanceof Container )
{
for ( Component child : ( ( Container ) component ).getComponents () )
{
changeFont ( child, font );
}
}
}
パネルと特定のフォントをこのメソッドに渡すだけで、すべての子もリファクタリングされます。
于 2012-10-04T16:09:09.720 に答える
12
-これを行うために使用できますUIManager
....
例えば:
public class FrameTest {
public static void setUIFont(FontUIResource f) {
Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource) {
FontUIResource orig = (FontUIResource) value;
Font font = new Font(f.getFontName(), orig.getStyle(), f.getSize());
UIManager.put(key, new FontUIResource(font));
}
}
}
public static void main(String[] args) throws InterruptedException {
setUIFont(new FontUIResource(new Font("Arial", 0, 20)));
JFrame f = new JFrame("Demo");
f.getContentPane().setLayout(new BorderLayout());
JPanel p = new JPanel();
p.add(new JLabel("hello"));
p.setBorder(BorderFactory.createTitledBorder("Test Title"));
f.add(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 300);
f.setVisible(true);
}
}
于 2012-10-04T15:12:41.560 に答える
4
UIManager
変更するコンポーネントのフォント値を設定します。たとえば、次のようにして、ラベルに使用するフォントを設定できます。
Font labelFont = ... ;
UIManager.put("Label.font", labelFont);
ルック アンド フィール (L&F) が異なれUIManager
ば、クラスのプロパティも異なる可能性があるため、ある L&F から別の L&F に切り替えると、問題が発生する可能性があることに注意してください。
于 2012-10-04T15:09:56.583 に答える