对于带有图标的JLabel,如果setHorizo??ntalTextPosition(SwingConstants.LEADING),无论标签有多宽,都会在文本后面立即绘制图标.
这对于列表来说尤其糟糕,因为图标将遍布整个地方,具体取决于每个项目的文本长度.
我跟踪代码,似乎在SwingUtilities#layoutCompoundLabelImpl中,文本宽度简单地设置为SwingUtilities2.stringWidth(c,fm,text),并且图标x设置为跟随文本而不考虑标签宽度.
这是最简单的情况:
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.setD