2011-01-21 46 views
5

我有一個Java Swing JLabel數組。我的程序的用戶可以向JFrame添加一個新的JLabel,並且我希望根據框架中JLabel的數量來改變JLabel中文本的大小。如果JLabel太多,文本仍然適合,並且不會與其他JLabel重疊。在JLabel中進行文本動態調整大小

+0

好..你有任何問題嗎?如果是這樣,請隨時編輯您的帖子並添加問題。最好用SSCCE(http://pscode.org/sscce.html)您已經嘗試過的內容。 –

+0

問題是什麼是一些很好的代碼來動態調整標籤中的文本大小,以便用戶可以添加儘可能多的標籤 – italiano40

回答

2

看起來不漂亮,但如果這是你想要的,下面是一段編譯和運行的代碼。隨意提取您的項目所需的任何代碼。玩得開心 - M.S.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class LabelSize extends JPanel {  

    private Font  font; 
    private JPanel  panel; 
    private JLabel  label = new JLabel ("Font Size Adapter Label", JLabel.CENTER); 
    private JTextField tf = new JTextField ("Type in text for new label here and hit [Enter]"); 

    public LabelSize() {   
     super (new BorderLayout()); 
     panel = labelPanel(); 
     add (panel, "North"); 
     add (tf, "South"); 
     tf.addActionListener (new ActionListener() { 
      public void actionPerformed (ActionEvent e) { 
       label.setText (tf.getText()); 
       label.setFont (font); 
       int labelW = (int) Math.ceil (label.getPreferredSize().getWidth()); 
       int maxWidth = (int) Math.floor (panel.getSize().getWidth()); 
       if (labelW <= maxWidth) 
        return; 
       for (int k = 1 ; labelW > maxWidth ; k++) { 
        Font labelFont = font.deriveFont (font.getSize() - k*1.0f); 
        label.setFont (labelFont); 
        labelW = (int) Math.ceil (label.getPreferredSize().getWidth()); 
     }}}); 
    } 

    private JPanel labelPanel() { 
     JPanel lp = new JPanel(new BorderLayout()); 
     lp.setPreferredSize (new Dimension (270,30)); 
     lp.add (label, "North"); 
     font = label.getFont(); 
     return lp; 
    } 

    public static void main (String[] args) { 
     JFrame lsFrame = new JFrame ("Lfit"); 
     lsFrame.add (new LabelSize()); 
     lsFrame.pack(); 
     lsFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     lsFrame.setVisible(true); 
}} 
+0

感謝您的代碼,但是沒有任何工作適合我,我需要根據Jlabel的大小 – italiano40

+0

不客氣,對不起,我不明白coment - 哪部分代碼不工作?我只是複製粘貼到一個編輯器上,保存,編譯並運行它,運行得很好。可能是我沒有得到你的問題 - 你想調整哪個組件(某些東西)?你想讓JLabel是固定的(默認)字體嗎? –