Pour un JLabel avec icône, si vous setHorizontalTextPosition(SwingConstants.LEADING)
, l'icône est peinte juste après le texte, quelle que soit la largeur de l'étiquette.Comment justifier une icône à droite dans un JLabel?
Ceci est particulièrement mauvais pour une liste, car les icônes seraient partout en fonction de la longueur du texte pour chaque élément.
J'ai tracé le code et il semble que dans SwingUtilities#layoutCompoundLabelImpl
, la largeur du texte est simplement définie sur SwingUtilities2.stringWidth(c, fm, text)
, et l'icône x est définie pour suivre le texte sans tenir compte de la largeur de l'étiquette.
Voici cas le plus simple:
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);
}
});
}
}
Vous pouvez voir que l'étiquette remplit toujours le cadre, mais l'icône reste en place. Vous obtiendrez le problème de miroir si vous définissez les deux arguments à TRAILING
. Je sais que je peux remplacer l'interface utilisateur, ou utiliser un JPanel, etc. Je me demande simplement s'il me manque quelque chose de simple dans JLabel. Sinon, cela ressemble à un bug Java.
FYI c'est jdk1.6.0_06 sur Windows XP.
Nop, je dois avoir du texte justifié à gauche et l'icône justifié à droite. –
Ah, je vois ce que tu veux dire. – trashgod