2011-01-21 18 views
5

Mam tablicę Java Swing JLabels. Użytkownik mojego programu może dodać nowy JLabel do JFrame, a ja chcę zmienić rozmiar tekstu w JLabel na podstawie liczby JLabeli w ramce. Jeśli jest zbyt dużo JLabela, tekst nadal będzie pasował i nie będzie nakładał się na inne JLabele.Tworzenie tekstu w JLabel dynamicznie zmieniaj rozmiar

+0

OK .. Czy masz pytanie na temat tego? Jeśli tak, możesz edytować swój wpis i dodawać pytania. Najlepiej z SSCCE (http://pscode.org/sscce.html) z tego, co już wypróbowałeś. –

+0

Pytanie brzmi: jaki jest dobry kod do dynamicznego rozmiaru tekstu w etykiecie, aby użytkownik mógł dodać tyle etykiet, ile chce? – italiano40

Odpowiedz

2

Nie wygląda ładnie, ale jeśli to jest to, czego chcesz, oto krótki fragment kodu do kompilacji i uruchomienia. Zachęcamy do wyodrębnienia kodu potrzebnego do projektu. Baw się dobrze, - 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

dzięki za kod, ale tak, żaden, który działa dla mnie, potrzebuję czegoś, co zmienia rozmiar na podstawie rozmiar Jlabel – italiano40

+0

Nie ma za co, przepraszam, nie rozumiem komendy - która część kodu nie działa? Właśnie skopiowałem-wkleiłem to na edytorze, zapisałem, skompilowałem i uruchomiłem, działa dobrze. Być może nie trafiłem na twoje pytanie - który komponent (coś) chciałeś zmienić? Czy chcesz, aby JLabels miał stałą czcionkę (domyślną)? –

Powiązane problemy