我知道我一定会为此而受到批评,但我正试图设置一个在其内容窗格中使用null布局的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在窗口中居中之外,没有任何影响。我也试过不改变内容窗格,而是添加根到它,然后添加p1到根(完全像在上面的代码,除了调用mainWindow.getContentPane().add(root);
而不是mainWindow.setContentPane(root);
),但没有变化。
JFrame
试图调整自己的大小时,发生了一些事情。什么好主意吗? 我遇到的问题是组件的底部和右侧与窗口边缘之间总是存在这个间隙
mainWindow.setResizable(false);
上面的语句应该在帧打包之前执行。
我知道我一定会为此而受到批评,但我正在尝试设置一个JFrame,它在其内容窗格中使用null布局,以便我可以为我的组件使用绝对定位
不要使用空布局,除非你的应用程序支持将组件拖动到随机位置。在这种情况下,布局管理器无法预测组件的位置。否则使用布局管理器
不太确定这是否是你想要的,但它适用于BorderLayout:
public static void main(String[] args) {
JFrame mainWindow = new JFrame("test");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel root = new JPanel(new BorderLayout());
root.setSize(1280, 720);
root.setPreferredSize(new Dimension(1280, 720));
root.setBackground(Color.GREEN);
JPanel p1 = new JPanel(null);
p1.setBounds(root.getBounds());
p1.setBackground(Color.RED);
root.add(p1);
mainWindow.setContentPane(root);
mainWindow.pack();
mainWindow.setVisible(true);
mainWindow.setResizable(false);
}