Wie kann ich das Symbol in einem JLabel rechtsbündig ausrichten?

Für ein JLabel mit Symbol, wenn SiesetHorizontalTextPosition(SwingConstants.LEADING), das Symbol wird direkt nach dem Text gezeichnet, egal wie breit das Etikett ist.

Dies ist besonders schlecht für eine Liste, da die Symbole überall angezeigt werden, je nachdem, wie lang der Text für die einzelnen Elemente ist.

Ich habe den Code nachverfolgt und es scheint, dass inSwingUtilities#layoutCompoundLabelImpl, Textbreite wird einfach auf @ gesetSwingUtilities2.stringWidth(c, fm, text) und das Symbol x folgt dem Text ohne Berücksichtigung der Etikettenbreite.

Hier ist der einfachste Fall:

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);
            }
        });
    }
}

Sie sehen, dass die Beschriftung immer den Rahmen ausfüllt, das Symbol jedoch gesetzt bleibt. Das Spiegelproblem tritt auf, wenn Sie beide Argumente auf @ setzeTRAILING.

Ich weiß, dass ich die Benutzeroberfläche überschreiben oder ein JPanel usw. verwenden kann. Ich frage mich nur, ob mir in JLabel etwas Einfaches fehlt. Wenn nicht, scheint es ein Java-Fehler zu sein.

FYI das ist jdk1.6.0_06 unter Windows XP.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage