2011-01-21 3 views
5

J'ai un tableau de Java Swing JLabels. L'utilisateur de mon programme peut ajouter un nouveau JLabel au JFrame, et je veux que la taille du texte dans le JLabel change en fonction du nombre de JLabels dans le cadre. S'il y a trop de JLabels, le texte sera toujours adapté et ne chevauchera pas les autres JLabels.Redimensionnement dynamique d'un texte dans un JLabel

+0

OK .. Avez-vous une question à propos de cela? Si c'est le cas, n'hésitez pas à modifier votre message et à ajouter les questions. De préférence avec un SSCCE (http://pscode.org/sscce.html) de ce que vous avez déjà essayé. –

+0

La question est ce qui est un bon code à la taille dynamique du texte dans l'étiquette afin que l'utilisateur peut ajouter autant qu'ils veulent des étiquettes – italiano40

Répondre

2

Ne semble pas joli, mais si c'est ce que vous voulez, voici un petit morceau de code à compiler et à exécuter. N'hésitez pas à extraire le code dont vous avez besoin pour votre projet. Amusez-vous, - 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

merci pour le code, mais oui personne qui fonctionne pour moi, j'ai besoin de quelque chose qui redimensionne basé sur taille du Jlabel – italiano40

+0

Vous êtes les bienvenus, et désolé, je ne comprends pas le commentaire - quelle partie du code ne fonctionne pas? Je l'ai simplement copié-collé sur un éditeur, sauvegardé, compilé et lancé, ça marche très bien. Peut-être que je n'ai pas bien compris votre question - quel composant (quelque chose) voulez-vous redimensionner? Voulez-vous que les JLabels soient de police fixe (par défaut)? –

Questions connexes