pour un jlabel avec icône, si vous 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 Voici le cas le plus simple : P> séthorizontaltextion (swingconstants.leading) code>, l'icône est peinte juste après le texte, quelle que soit la largeur de l'étiquette.
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>
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);
}
});
}
}
3 Réponses :
Est-ce l'effet souhaité?
addendum: Je pense qu'un panneau est le moyen d'aller. p>
p>
NOP, je dois avoir le texte à gauche et l'icône juste justifié.
Vous devez utiliser: p>
Label1.SethorizontalTextion (swingconstants.left); p>
(Définissez la position du texte, par rapport à l'icône) p>
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 fonctionne génial! pour un alignement automatique à droite sans largeur fixe qui fonctionne avec des colonnes de largeur variable: p >
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>
@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);
}
}
Bonne solution. J'ai pris la liberté d'ajouter une méthode qui fonctionne avec des largeurs de colonne variable.