2011-01-21 14 views
5

Possiedo un array di Java Swing JLabels. L'utente del mio programma può aggiungere una nuova JLabel a JFrame e voglio che la dimensione del testo nella modifica di JLabel sia basata sul numero di JLabel nel frame. Se ci sono troppi JLabels, il testo si adatterà comunque e non si sovrapporrà ad altri JLabels.Rendere dinamico il testo in una JLabel

+0

OK .. Avevi una domanda in merito? Se è così, sentiti libero di modificare il tuo post e aggiungere le domande. Preferibilmente con un SSCCE (http://pscode.org/sscce.html) di ciò che hai già provato. –

+0

La domanda è che cos'è un buon codice per ridimensionare il testo nell'etichetta in modo che l'utente possa aggiungerne tante quante vogliono le etichette – italiano40

risposta

2

Non sembra carino, ma se è quello che vuoi, ecco una rapida porzione di codice da compilare ed eseguire. Sentiti libero di estrarre il codice che ti serve per il tuo progetto. Divertiti, - 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

grazie per il codice, ma non c'è nessuno che funzioni per me, ho bisogno di qualcosa che si ridimensiona in base a dimensione della Jlabel – italiano40

+0

Siete i benvenuti, e scusate, non capisco il proposito - quale parte del codice non funziona? L'ho appena copiato-n-incollato su un editor, salvato, compilato e eseguito, funziona perfettamente. Forse non ho capito bene la tua domanda - quale componente (qualcosa) vuoi ridimensionare? Volevi che i JLabels fossero di tipo fisso (predefinito)? –