2014-03-29 35 views
0

我正在學習Swing並製作了一個面板(來自其他StackOverflow代碼的幫助)。我在框架上添加了棋盤格設計,但是我發現框架並不像應該那樣大。爲什麼我的JPanel比它應該小?

這裏是我的代碼:

@Override 
    protected void paintComponent(Graphics g) { 
     int width = getWidth(), height = getHeight(); 
     g.clearRect(0, 0, width, height); 
     g.setColor(Color.BLACK); 

     for (int i=0;i<=width;i+=50) { 
      g.drawLine(0,i,width,i); 
     } 
     for (int i=0;i<=height;i+=50) { 
      g.drawLine(i,0,i,height); 
     } 
     label.setText("H = "+ getHeight() +" W = "+ getWidth()); // check actual size 
     add(label); 
    } 

    private void gui(Pan window) { 
     frame = new JFrame(); 
     Container container = frame.getContentPane();  
     container.add(window); 
     frame.setSize(400, 400); // size written here 
     frame.setVisible(true); 
    } 

如果你運行它,你會看到窗口的大小。這將是364乘384,而不是代碼中寫的400乘400。

如果我通過500更改尺寸爲500,該窗口將是462 484

問:爲什麼是38和16關的尺寸?

+1

Java爲邊界添加了插入。請參閱http://stackoverflow.com/questions/2451252/swing-set-jframe-content-area-size – blueygh2

回答

5

這將是由384 362,而不是400×400

由於幀的大小包括標題欄和邊界。不要使用setSize()方法。

改爲覆蓋自定義面板的getPreferredSize()方法以返回您希望面板的尺寸。

然後你使用:

frame.pack(); 

那麼幀的大小將是你的面板的首選大小加上標題欄和邊框的大小。

+0

重寫'getPrefferedSize()'效果很好!將400的尺寸縮小400,可以使窗口達到正確的尺寸。但是,如果我添加'setResizable(false)',它將變成410×410。思考? – Chronicle

+1

@Chronicle,setResizable()應該在你打包框架之前完成。該框架仍然爲可調整大小的邊框呈現5像素邊框。由於沒有邊框,多餘的空間會進入面板。 – camickr

相關問題