2012-10-04 9 views
7

Ich möchte eine bestimmte Schriftart für alle Komponenten in einem JPanel festlegen, aber ich bevorzuge, dass die Frage noch allgemeiner und nicht auf JPanel beschränkt ist. Wie kann ich die Schriftart auf eine Liste von Komponenten in einem Container (JFrame oder JPanel) setzen?Legen Sie die gleiche Schriftart für alle Komponente Java

Antwort

3

Legen Sie die Schriftartenwerte in UIManager für die Komponenten fest, die Sie ändern möchten. Zum Beispiel können Sie die Schriftart für Etiketten, indem Sie verwendet gesetzt:

Font labelFont = ... ; 
UIManager.put("Label.font", labelFont); 

Beachten Sie, dass unterschiedliches Aussehen und fühlt sich (L & F) verschiedene Eigenschaften für die UIManager Klasse haben kann, so dass, wenn Sie wechseln von einem L & F zu einem anderen können Sie Probleme haben.

+0

bekommen Wenn ich UIManager verwende ich die Schrift auf die Komponente in der gesamten Anwendung ändern, aber ich Ich möchte es nur in einem bestimmten 'JFrame' oder' JPanel' ändern. Danke – Luca

8

- Sie UIManager dies tun können ....

ZB:

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); 
    } 
} 
+0

Wenn ich UIManager benutze, ändere ich die Schriftart zur Komponente während der Anwendung, aber ich möchte es nur in einem bestimmten 'JFrame' oder' JPanel' ändern. Danke – Luca

16

Hier ist eine einfache Methode, die Sie Font auf den gesamten Komponenten Baum angeben können, unter jeder Container (oder nur eine einfache Komponente, ist egal):

public static void changeFont (Component component, Font font) 
{ 
    component.setFont (font); 
    if (component instanceof Container) 
    { 
     for (Component child : ((Container) component).getComponents()) 
     { 
      changeFont (child, font); 
     } 
    } 
} 

Einfach passieren y unser Panel und spezifische Schriftart in diese Methode und Sie werden alle Kinder auch umgestaltet bekommen.

+0

Ehrfürchtig, sein Arbeiten groß, ich habe Ihren Code-Bit wie folgt geändert, und es hilft mir, ich poste diesen Code in der Antwort –

2

Inspiriert von Mikle Grains Antwort Ich benutzte seinen Code die Schrift jeder Komponente in Prozent zu erhöhen, indem die alte Schrift

public static void changeFont(Component component, int fontSize) { 
    Font f = component.getFont(); 
    component.setFont(new Font(f.getName(),f.getStyle(),f.getSize() + fontSize)); 
    if (component instanceof Container) { 
     for (Component child : ((Container) component).getComponents()) { 
      changeFont(child, fontSize); 
     } 
    } 
} 
Verwandte Themen