JLabel上的EmptyBorder只能隐藏它看起来应该的一半

时间:2017-12-02 03:12:58

标签: java swing border

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

代码:

JFrame frame = new JFrame("test");
frame.setSize(1000, 1000);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

try {
    BufferedImage bf = ImageIO.read(new File(FILEPATH));
    img = new JLabel(new ImageIcon(bf));
} catch (IOException e) {
    e.printStackTrace();
}

frame.getContentPane().add(img);
img.setBorder(new EmptyBorder(0, frame.getContentPane().getWidth(), 0, 0));

此代码仅使JLabel /图像显示在屏幕的一半。我可以通过将EmptyBorder的左参数设置为frame.getContentPane.getWidth() * 2来轻松修复它,但我只是想知道为什么它似乎将插入距离减半。根据我的测试,如果JLabel包含ImageIcon,则只将其减半。如果它包含文本,那么insets就像它们应该的那样工作。我只测试了文本和ImageIcon。

1 个答案:

答案 0 :(得分:1)

不确定具体计算是什么,但默认情况下,Icon位于可用空间的中心。

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

如果您同时拥有图标和文字(或仅包含文字),则不会发生这种情况。

一个解决方案是:

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