JLabel 上的 EmptyBorder 只插入了它看起来应该的一半
EmptyBorder on JLabel only insets half of what it looks like it should
我有一个 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/image 出现在屏幕的一半之外。我可以通过将 EmptyBorder
的左侧参数设置为 frame.getContentPane.getWidth() * 2
来轻松修复它,但我只是想知道为什么它似乎将插入距离减半。根据我的测试,只有在 JLabel 包含 ImageIcon 时才会将其减半。如果它包含文本,则插图会像它们应该的那样工作。我只测试过 text 和 ImageIcon。
不确定具体的计算方法,但默认情况下,图标位于可用的 space 中心。
如您所见,当仅显示图标时,图标似乎向左移动了图标大小的一半。
如果您同时拥有图标和文本(或只有文本),则不会发生这种情况。
一个解决方案是:
img = new JLabel(new ImageIcon(bf), SwingConstants.LEFT);
我有一个 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/image 出现在屏幕的一半之外。我可以通过将 EmptyBorder
的左侧参数设置为 frame.getContentPane.getWidth() * 2
来轻松修复它,但我只是想知道为什么它似乎将插入距离减半。根据我的测试,只有在 JLabel 包含 ImageIcon 时才会将其减半。如果它包含文本,则插图会像它们应该的那样工作。我只测试过 text 和 ImageIcon。
不确定具体的计算方法,但默认情况下,图标位于可用的 space 中心。
如您所见,当仅显示图标时,图标似乎向左移动了图标大小的一半。
如果您同时拥有图标和文本(或只有文本),则不会发生这种情况。
一个解决方案是:
img = new JLabel(new ImageIcon(bf), SwingConstants.LEFT);