2013-04-18 201 views
0

我嘗試使用JPanel 的子類在屏幕上顯示填充的橢圓形,當我嘗試使用FlowLayout將此子類的對象添加到JFrame時,橢圓形顯示不正確我不'不知道問題是什麼。請問你能幫幫我嗎?使用FlowLayout將JPanel添加到JFrame

enter image description here

這裏是我的代碼

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.BLACK); 
    g.fillOval(0, 0, 50, 50); 
} 

在主

JFrame frame = new JFrame("Ball"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300,300); 
    frame.setVisible(true); 
    frame.setLocationRelativeTo(null); 
    frame.setLayout(new FlowLayout()); 
    BallPanel ball = new BallPane(); 
    frame.add(ball); 

回答

1

FlowLayout的Javadoc中:

流佈局把每個組件都假定爲它的自然(首選)大小

既然你做了一些自定義的畫,BallPanel無法計算其首選大小(這是基於您添加面板的組件)。因此,請在BallPanel類中覆蓋getPreferredSize方法以返回正確的尺寸(正確的方式與您的自定義繪畫相匹配)。考慮爲getMinimumSizegetMaximumSize做同樣的事情。

當我必須調試Swing佈局問題時,我總是使用的是在特定顏色的組件中添加邊框。通過這種方式,您可以清楚地看到組件在其父容器中的大小,這可能是調試的一個很好的起點。在你的情況下,它會顯示一個非常小的面板;-)

1

當您創建的任何自定義組件,做風俗畫,你需要重寫getPreferredSize()方法返回自定義組件的大小。理想情況下,您也會覆蓋最小/最大尺寸。

然後佈局經理可以完成它的工作。