对于带有图标的 JLabel,如果您setHorizontalTextPosition(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.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.getContentPane().add(c);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
您可以看到标签始终填充框架,但图标保持不变。如果将两个参数都设置为,则会遇到镜像问题TRAILING
.
我知道我可以覆盖 UI,或者使用 JPanel 等。我只是想知道我是否在 JLabel 中遗漏了一些简单的东西。如果不是,那么这似乎是一个 Java 错误。
仅供参考,这是 Windows XP 上的 jdk1.6.0_06。
你应该使用:
label1.setHorizontalTextPosition(SwingConstants.LEFT);
(设置文本相对于图标的位置)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)