Java JPanel在给定内容窗格时不填充窗口';界
我知道我肯定会为此受到指责,但我正在尝试设置一个Java JPanel在给定内容窗格时不填充窗口';界,java,swing,jpanel,layout-manager,null-layout-manager,Java,Swing,Jpanel,Layout Manager,Null Layout Manager,我知道我肯定会为此受到指责,但我正在尝试设置一个JFrame,在其内容窗格中使用空布局,以便我可以对我的组件使用绝对定位 我遇到的问题是,我的组件底部和右侧与窗口边缘之间总是存在这种间隙。我想也许我只是定位/调整了一些错误,所以我使用一个JPanel进行测试,并给它与内容窗格相同的边界,但仍然存在差距 两边都相等,看起来像是窗口边框宽度的两倍。代码如下: public static void main(String[] args) { JFrame mainWindow = ne
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
试图调整自身大小时,发生了一些事情。有什么想法吗?不太确定这是否是您正在寻找的,但它与边框布局一起工作:
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);
}
我遇到的问题是,我的组件的底部和右侧与窗口边缘之间总是存在这种间隙
应在包装框架之前执行上述语句
我知道我肯定会为此受到指责,但我正在尝试设置一个JFrame,在其内容窗格中使用空布局,这样我就可以对我的组件使用绝对定位
除非应用程序支持将组件拖动到随机位置,否则不要使用空布局。在这种情况下,布局管理器无法预测零部件的位置。否则,请使用布局管理器。“我知道我一定会因此受到炮击,……”炮击?你应该担心的是一个坏掉的GUI,你已经有了。您甚至没有提供“必须”使用null
布局的原因(通常是错误的)。所以你破坏了这个布局,没有任何理由说明你为什么要走那条路线(你显然知道你不应该走),你希望我们来修复它?只有当……1)它包含一个(最小完整且可验证的示例)时,我才会更仔细地研究这个问题。2) 它提供了图形用户界面的ASCII艺术(或带有简单绘图的图像),因为它应该以最小的尺寸显示,并且(如果可以调整大小)具有额外的宽度/高度。“拖动组件”是我在这里尝试的。所以我把setResizeable()移到了pack()的正上方,现在一切都好了。我想这很简单。
mainWindow.setResizable(false);