2016-12-19 47 views
1

当我的主要运行以下命令:Java:如何防止Canvas添加到JFrame时被调整大小?

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乘400 Canvas?

+0

也许尝试不同的布局管理器。我认为默认是FlowLayout。它可能会这样做,但我不确定。 – byxor

回答

2

请勿使用Canvas,即AWT组件。

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

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

+0

重写它是一个好主意吗?它在内部不会有不同的规模吗? – byxor

+1

@BrandonIbbotson,这是假设你正在做自定义绘画和创建一个自定义组件,所以组件应负责确定其大小。如果你当然只是使用面板作为其他Swing组件的容器,那么你应该让布局管理器确定它的大小。 – camickr

+0

完美。一个信息丰富的答案,我也可以使用。 – byxor

相关问题