2012-10-04 8 views
7

Tôi muốn đặt phông chữ cụ thể cho tất cả thành phần trong một số JPanel nhưng tôi thích câu hỏi đó vẫn còn chung chung hơn và không giới hạn ở JPanel. Làm cách nào để tôi có thể đặt phông chữ thành danh sách thành phần trong vùng chứa (JFrame hoặc JPanel)?Đặt cùng một phông chữ cho tất cả các thành phần Java

Trả lời

3

Đặt giá trị phông chữ trong UIManager cho các thành phần bạn muốn thay đổi. Ví dụ, bạn có thể thiết lập font chữ sử dụng cho nhãn bằng cách thực hiện:

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

Lưu ý rằng cái nhìn khác nhau và cảm thấy (L & F) có thể có các thuộc tính khác nhau cho các lớp UIManager, vì vậy nếu bạn chuyển từ một L & F khác, bạn có thể có vấn đề.

+0

Nếu tôi sử dụng UIManager tôi thay đổi phông chữ để các thành phần trong suốt ứng dụng nhưng tôi không chỉ thay đổi nó trong một 'JFrame' hoặc' JPanel' cụ thể. Cảm ơn – Luca

8

- Bạn có thể sử dụng UIManager để làm điều này ....

Ví dụ:

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

Nếu tôi sử dụng UIManager tôi thay đổi phông chữ thành thành phần trong suốt ứng dụng nhưng tôi sẽ không thay đổi nó chỉ trong một 'JFrame' hoặc' JPanel' cụ thể. Cảm ơn – Luca

16

Đây là một phương pháp đơn giản cho phép bạn chỉ định Font để cây toàn bộ các thành phần dưới bất kỳ Vùng chứa nào (hoặc chỉ một Thành phần đơn giản, không quan trọng):

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

Chỉ cần vượt qua y bảng điều khiển của chúng tôi và Font cụ thể vào phương pháp này và bạn sẽ nhận được tất cả các childs refactored là tốt.

+0

Tuyệt vời, công việc tuyệt vời của nó, tôi đã thay đổi mã bit của bạn như thế này, và nó giúp tôi, tôi đang đăng mã đó trong câu trả lời –

2

Lấy cảm hứng từ Mikle Ngũ cốc trả lời tôi đã sử dụng mã của mình để tăng phông chữ của mỗi thành phần theo tỷ lệ bằng cách cũ fontsize

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