11
votes

Comment justifier la justifie l'icône dans un jlabel?

pour un jlabel avec icône, si vous séthorizontaltextion (swingconstants.leading) code>, l'icône est peinte juste après le texte, quelle que soit la largeur de l'étiquette.

Ceci est particulièrement mauvais pour un Liste, comme les icônes seraient sur la place en fonction de la durée de la durée du texte pour chaque élément. P>

J'ai tracé le code et il semble être que dans Sweangs # LayoutComPoundLabelImMIMM code> , la largeur de texte est simplement définie sur swingutities2.stringwidth (c, fm, texte) code> et l'icône x est définie pour suivre le texte sans envisager la largeur de l'étiquette. P>

Voici le cas le plus simple : P>

import java.awt.*;
import javax.swing.*;

public class TestJLabelIcon
{
    public static void main(String args[])
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                JLabel c = new JLabel("abc");
                c.setHorizontalTextPosition(SwingConstants.LEADING);
                c.setHorizontalAlignment(SwingConstants.LEADING);
                c.setIcon(UIManager.getIcon("FileChooser.detailsViewIcon"));
                c.setBorder(BorderFactory.createLineBorder(Color.RED));

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                frame.getContentPane().add(c);    
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}


0 commentaires

3 Réponses :


14
votes

Est-ce l'effet souhaité?

addendum: Je pense qu'un panneau est le moyen d'aller.

 image xxx


1 commentaires

NOP, je dois avoir le texte à gauche et l'icône juste justifié.



24
votes

Vous devez utiliser:

Label1.SethorizontalTextion (swingconstants.left);

(Définissez la position du texte, par rapport à l'icône)


0 commentaires

6
votes

J'ai trouvé un moyen beaucoup plus facile de le faire. J'avais besoin d'avoir ce type de mise en page dans une JTABLE et j'ai fait la bonne justification en obtenant la largeur du texte puis en définissant manuellement la largeur entre le texte et l'icône. J'ai sous-classé un défautTableCellrenderer pour mon xxx pré>

fonctionne génial!
Et oui, pour le code réel, il convient de vérifier que la largeur de texte n'est pas plus grande que la Widdth souhaitée. P>


pour un alignement automatique à droite sans largeur fixe qui fonctionne avec des colonnes de largeur variable: p >

    @Override
    public void setBounds(int x, int y, int width, int height) {
        super.setBounds(x, y, width, height);
        if (getIcon() != null) {
            int textWidth = getFontMetrics(getFont()).stringWidth(getText());
            Insets insets = getInsets();
            int iconTextGap = width - textWidth - getIcon().getIconWidth() - insets.left - insets.right - PADDING;
            setIconTextGap(iconTextGap);
        } else {
            setIconTextGap(0);
        }
    }


1 commentaires

Bonne solution. J'ai pris la liberté d'ajouter une méthode qui fonctionne avec des largeurs de colonne variable.