2011-01-21 26 views
5

Bir Java Swing JLabels dizim var. Programımın kullanıcısı JFrame'e yeni bir JLabel ekleyebilir ve çerçevedeki JLabels sayısına bağlı olarak JLabel değişikliğindeki metnin boyutunu yapmak istiyorum. Çok fazla JLabels varsa, metin hala diğer JLabels ile örtüşecek ve çakışmayacaktır.JLabel'de metin oluşturma dinamik olarak yeniden boyutlandırma

+0

Tamam .. Bunlardan herhangi biriyle ilgili bir sorunuz mu var? Eğer öyleyse, mesajınızı düzenlemek ve soruları eklemek için çekinmeyin. Halihazırda denediğiniz bir SSCCE (http://pscode.org/sscce.html) ile. –

+0

Sorunun amacı, etiketin içerdiği metin için Dinamik kodun iyi bir kodudur. Bu nedenle, kullanıcı kodu – italiano40

cevap

2

Güzel görünmüyor, ancak istediğiniz şey buysa, derlemek ve çalıştırmak için hızlı bir kod parçası. Projeniz için ihtiyacınız olan herhangi bir kodu çıkartmaktan çekinmeyin. İyi eğlenceler - 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

etiketini istedikleri kadar ekleyebilir, ancak benim için işe yaramıyor. Jlabel'in büyüklüğü – italiano40

+0

Hoşgeldiniz, ve üzgünüm, comenti anlamıyorum - kodun hangi kısmı çalışmıyor? Sadece bir editöre kopyaladım, kurtardım, derledim ve çalıştırdım, iyi çalışıyor. Sorunuzu doğru bir şekilde alamadım - hangi bileşeni (bir şey) yeniden boyutlandırmak istiyorsunuz? JLabels'in sabit (varsayılan) yazı tipinde olmasını ister misiniz? –

İlgili konular