2012-02-08 95 views
2

所以我想製作一個基於Canvas的Java應用程序。我已經將我的主類擴展到了Canvas,並且我在它的構造函數中調整了它的大小。Java Canvas白色邊緣

public CanvasApp() { 
    Dimension size = new Dimension(640, 480); 
    setSize(size); 
    setPreferredSize(size); 
    setMinimumSize(size); 
    setMaximumSize(size); 
} 

,並在主函數中,我提出一個框架,就像這樣:

CanvasApp cnv = new CanvasApp(); 
JFrame frame = new JFrame(""); 
JPanel panel = new JPanel(new BorderLayout()); 
panel.setBorder(null); //I've tried this 
panel.setSize(640,480); //but still doesn't work =(
panel.add(cnv, BorderLayout.CENTER); 

frame.setContentPane(panel); 
frame.pack(); 
frame.setResizable(false); 
frame.setLocationRelativeTo(null); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 

但內容窗格將出現在大小650x490。爲什麼是這樣?

我也附上了一張圖片。

I've drew a line from 0,0 to 640,480

+0

如需更快獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。順便說一句 - 不要將基於AWT的「組件」與Swing GUI混合使用。改用'JComponent'。 – 2012-02-08 13:43:49

+0

對不起,那是我的錯。我做了一個Canvas而不是'Component' :) – Rothens 2012-02-08 13:58:51

+0

O ... K在這種情況下,*不要將基於AWT的** Canvas **與Swing GUI混合使用。使用.. * – 2012-02-08 14:41:14

回答

5

因爲一個JFrame周圍有5px的邊框,看看你的電腦屏幕上的任何框架,你會發現一種壓花邊界 - 即邊境5像素寬增加10個像素高度上和寬度。您只將面板分配到640 x 480並將其嵌入到框架中 - 框架然後將其自己的邊框添加到該框架中。

+0

這也是我的第一個想法。但面板是650x490,不是整個東西:( – Rothens 2012-02-08 13:14:31

+0

JPanel也有它的邊框 - 做cnv.setBorder(BorderFactory.createEmptyBorder()) – 2012-02-08 13:22:03

+0

我已經設置面板邊框爲空,但我不能設置'Canvas'的邊框 – Rothens 2012-02-08 13:25:18

3

這可能是因爲每個JComponen都有一個邊框,所以您將CanvasApp放在JPanel和JPanel本身內部放入JFrame中。這可能是您最後獲得更大尺寸的原因。 有關如何在這裏使用邊框的信息,請參閱oracle網站:http://docs.oracle.com/javase/tutorial/uiswing/components/border.html

+0

我已將邊框設置爲空,並調整了面板的大小,仍然無法工作:( – Rothens 2012-02-08 13:15:00