Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel在给定内容窗格时不填充窗口';界_Java_Swing_Jpanel_Layout Manager_Null Layout Manager - Fatal编程技术网

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);