我知道我一定会为此大吃一惊,但我正在尝试JFrame
在其内容窗格中设置一个使用空布局的布局,以便我可以为我的组件使用绝对定位。
我遇到的问题是组件的底部和右侧与窗口边缘之间总是存在这种间隙。我想也许我只是定位/调整大小错误,所以我使用一个单一的测试JPanel
并给它与内容窗格相同的边界,但仍然存在差距。
两边相等,看起来是窗口边框宽度的两倍。这是代码:
public static void main(String[] args) {
JFrame mainWindow = new JFrame("test");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel root = new JPanel();
root.setSize(1280, 720);
root.setPreferredSize(new Dimension(1280, 720));
root.setBackground(Color.GREEN);
root.setLayout(null);
mainWindow.setContentPane(root);
JPanel p1 = new JPanel();
p1.setBounds(root.getBounds());
p1.setBackground(Color.RED);
root.add(p1);
mainWindow.pack();
mainWindow.setVisible(true);
mainWindow.setResizable(false);
}
我认为可能不使用布局管理器是问题所在,所以我尝试将根 JPanel 保留为其默认流布局并为 p1 提供首选大小(1280x720)。但是,除了在窗口中居中 p1 之外,这没有任何影响。我也尝试过不更改内容窗格,而是将 root 添加到它,然后将 p1 添加到 root(与上面的代码完全一样,除了调用mainWindow.getContentPane().add(root);
而不是mainWindow.setContentPane(root);
),但没有任何变化。
在这一点上我唯一能想到的就是当JFrame
试图调整自身大小时发生了一些事情。有任何想法吗?