Java JLabel上的EmptyBorder只插入了它应该插入的内容的一半

Java JLabel上的EmptyBorder只插入了它应该插入的内容的一半,java,swing,border,Java,Swing,Border,我有一个JFrame和一个ImageIcon作为JLabel,我希望它完全脱离JFrame 代码: 此代码仅使JLabel/图像在屏幕上显示一半。通过将EmptyBorder的左参数设置为frame.getContentPane.getWidth()*2,我可以很容易地修复它,但我只是想知道为什么它似乎将插入距离减半。根据我的测试,只有当JLabel包含ImageIcon时,才会将其切成两半。如果它包含文本,则插图按其看起来应该的方式工作。我只测试了文本和图像图标。不确定确切的计算是什么,但默认

我有一个JFrame和一个ImageIcon作为JLabel,我希望它完全脱离JFrame

代码:


此代码仅使JLabel/图像在屏幕上显示一半。通过将
EmptyBorder
的左参数设置为
frame.getContentPane.getWidth()*2
,我可以很容易地修复它,但我只是想知道为什么它似乎将插入距离减半。根据我的测试,只有当JLabel包含ImageIcon时,才会将其切成两半。如果它包含文本,则插图按其看起来应该的方式工作。我只测试了文本和图像图标。

不确定确切的计算是什么,但默认情况下,图标位于可用空间的中心

正如您所注意到的,当仅显示图标时,图标似乎向左移动了图标大小的一半

如果同时具有图标和文本(或仅文本),则不会发生这种情况

一种解决办法是:

img = new JLabel(new ImageIcon(bf), SwingConstants.LEFT);

1) 为了更快地获得更好的帮助,请发布一个or。2) 尝试在没有映像的情况下复制问题。如果不可能,获取图像的一种方法(例如)是热链接到中看到的图像。我对您的代码进行了快速测试,没有任何问题-但是,我添加了
JLabel
(没有图像)在边框设置后,
contentPane
上显示并调用
revalidate
之前,我添加了JLabel(没有图像)——OP已经声明这不是文本问题,我也用我的答案确认了这一点。重新验证日期也不是问题所在。设置组件的属性时,Swing调用revalidate()和repaint()。
img = new JLabel(new ImageIcon(bf), SwingConstants.LEFT);