2012-12-31 91 views
1

所以,我有一個包含JPanel的ArrayList;所有JPanel都有一個BorderLayout,它帶有一個設置在NORTH上的JPanel(包含兩個JLabel)和一個設置在CENTER上的JTextArea(當然包含文本)。我的問題是如何修改每個JTextArea的字體大小?修改ArrayList中所有JPanel的字體大小<JPanel>

+3

你可能需要尋找到[PLAF(http://stackoverflow.com/tags/look-and-feel/info)或'UIManager'。 –

回答

5

下面是一些簡單的代碼,允許通過setFontSize(int index, int fontSize)方法設置JTextArea字體大小。請注意,這僅適用於panels陣列列表中的文本區域。在以下示例中,我更改了文本區域#1和#3的字體(請參閱main方法以瞭解執行此操作的調用)。

enter image description here

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.util.ArrayList; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class SimpleFrame extends JFrame { 
    ArrayList<JPanel> panels = new ArrayList<JPanel>(); 

    public SimpleFrame() { 
     super("Simple Panel List Example"); 

     JPanel content = (JPanel)getContentPane(); 
     content.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); 

     // add some panels to the array list 
     for(int i = 0; i < 5; i++) { 
     BorderLayout b = new BorderLayout(); 
     JPanel p = new JPanel(b); 
     JLabel north = new JLabel("Label #"+i); 
     JTextArea center = new JTextArea("TextArea #"+i); 
     p.add("North", north); 
     p.add("Center", center); 

     panels.add(p); 
     content.add(p); 
     } 
    } 

    // change the font size of the JTextArea on panel #i 
    public void setFontSize(int i, int fontSize) { 
     JPanel p = panels.get(i); 
     JTextArea t = (JTextArea)((BorderLayout)p.getLayout()).getLayoutComponent("Center"); 
     Font f = t.getFont(); 
     Font f2 = f.deriveFont((float)fontSize); 
     t.setFont(f2); 
    } 

    public static void main(String[] argv) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      SimpleFrame c = new SimpleFrame(); 
      c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      c.pack(); 
      c.setVisible(true); 

      // we can change the font size using our setFontSize method 
      c.setFontSize(1, 8); 
      c.setFontSize(3, 16); 
     } 
     }); 
    } 
} 
+0

建議使用SwingUtilities.invokeLater方法開始擺動。去谷歌上查詢。 – vels4j

+0

好點@ vels4j,謝謝。我已編輯相應的代碼。 – 808sound

+0

多數民衆贊成好。希望你讀過差異。 – vels4j