2011-01-21 59 views
5

Tôi có một dãy Java JLabels Swing. Người dùng chương trình của tôi có thể thêm một JLabel mới vào JFrame, và tôi muốn làm cho kích thước của văn bản trong thay đổi JLabel dựa trên số lượng các JLabels trong khung. Nếu có quá nhiều JLabels, văn bản vẫn sẽ khớp và sẽ không chồng lên các JLabels khác.Đặt văn bản trong JLabel tự động đổi kích thước

+0

OK .. Bạn có câu hỏi nào về điều đó không? Nếu có, vui lòng chỉnh sửa bài đăng của bạn và thêm các câu hỏi. Tốt hơn với SSCCE (http://pscode.org/sscce.html) về những gì bạn đã thử. –

+0

Câu hỏi là một số mã tốt để kích thước động văn bản trong nhãn để người dùng có thể thêm bao nhiêu khi họ muốn nhãn – italiano40

Trả lời

2

Không đẹp, nhưng nếu đó là những gì bạn muốn, dưới đây là một đoạn mã nhanh để biên dịch và chạy. Vui lòng trích xuất bất kỳ mã nào bạn cần cho dự án của mình. Vui chơi, - 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

cảm ơn mã, nhưng yea không có gì làm việc cho tôi, tôi cần một cái gì đó thay đổi kích thước dựa trên kích thước của Jlabel – italiano40

+0

Bạn được chào đón, và xin lỗi, tôi không hiểu coment - phần nào của mã không hoạt động? Tôi chỉ sao chép-n-dán nó trên một trình soạn thảo, lưu, biên dịch và chạy nó, chạy tốt. Có thể tôi đã không nhận được câu hỏi của bạn đúng - thành phần nào (thứ gì đó) mà bạn muốn thay đổi kích cỡ? Bạn có muốn các JLabels có phông chữ cố định (mặc định) không? –

Các vấn đề liên quan