2016-12-19 49 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

相關問題