Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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:当画布被添加到JFrame中时,如何防止画布被调整大小?_Java_Swing_Canvas_Jframe - Fatal编程技术网

Java:当画布被添加到JFrame中时,如何防止画布被调整大小?

Java:当画布被添加到JFrame中时,如何防止画布被调整大小?,java,swing,canvas,jframe,Java,Swing,Canvas,Jframe,在我的main中运行此命令时: Canvas can = new Canvas(); can.setSize(400, 400); System.out.print(can.getWidth() + ", " + can.getHeight() + " "); JFrame frame = new JFrame(); frame.add(can); frame.pack(); frame.setResizable(false);

在我的main中运行此命令时:

    Canvas can = new Canvas();

    can.setSize(400, 400);

    System.out.print(can.getWidth() + ", " + can.getHeight() + " ");

    JFrame frame = new JFrame();

    frame.add(can);
    frame.pack();
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    System.out.println(can.getWidth() + ", " + can.getHeight());
控制台显示: 400, 400 410,410


似乎当我将画布添加到JFrame并打包JFrame时,画布的宽度和高度增加了10个像素。有什么方法可以防止这种情况发生,并得到一个400 x 400的画布吗?

不要使用画布,这是AWT组件

使用Swing时,应使用
JPanel
,然后覆盖面板的
getPreferredSize()
,以返回所需的大小


此外,setSize()什么也不做。布局管理器将根据布局管理器的规则确定每个组件的大小。

也许可以尝试不同的布局管理器。我认为默认设置是FlowLayout。它可以这样做,但我不确定。覆盖它是个好主意吗?它的内部尺寸是否仍将不同?@BrandonIbbotson,这是假设您正在进行自定义绘制并创建自定义组件,因此组件应负责确定其大小。当然,如果您只是将面板用作其他Swing组件的容器,那么应该让布局管理器确定其大小。完美。一个我也可以使用的信息丰富的答案。