Java:当画布被添加到JFrame中时,如何防止画布被调整大小?
在我的main中运行此命令时: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);
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组件的容器,那么应该让布局管理器确定其大小。完美。一个我也可以使用的信息丰富的答案。