2011-01-21 32 views
5

Tengo una matriz de Java Swing JLabels. El usuario de mi programa puede agregar un nuevo JLabel al JFrame, y quiero hacer que el tamaño del texto en el JLabel cambie en función del número de JLabels en el marco. Si hay demasiados JLabels, el texto aún se ajustará y no se superpondrá a otros JLabels.Hacer texto en un JLabel cambiar el tamaño dinámicamente

+0

OK ... ¿Tiene alguna pregunta sobre algo de eso? Si es así, siéntase libre de editar su publicación y agregar las preguntas. Preferiblemente con un SSCCE (http://pscode.org/sscce.html) de lo que ya ha intentado. –

+0

La pregunta es, ¿cuál es un buen código para el tamaño dinámico del texto en la etiqueta para que el usuario pueda agregar tantas etiquetas como quiera? – italiano40

Respuesta

2

No se ven muy bien, pero si eso es lo que quieres, aquí hay una pieza rápida de código para compilar y ejecutar. Siéntete libre de extraer el código que necesites para tu proyecto. Diviértete, - 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

gracias por el código, pero si ninguno que me funcione, necesito algo que cambie de tamaño según tamaño de Jlabel – italiano40

+0

De nada, y lo siento, no entiendo el comentario, ¿qué parte del código no funciona? Acabo de copiarlo y pegarlo en un editor, guardarlo, compilarlo y ejecutarlo, funciona perfectamente. Puede ser que no recibí tu pregunta correcta, ¿qué componente (algo) quisiste redimensionar? ¿Quería que los JLabels fueran de tipo fijo (predeterminado)? –

Cuestiones relacionadas