2014-05-01 68 views
-3

我想在未裝飾的JFrame中做一個關閉按鈕。我已經做了PolygonGraphics2D fillPolygon

Polygon closePol = new Polygon(
      new int[] {getWidth() - 25, getWidth(), getWidth(), getWidth() - 25}, 
      new int[] {0, 0, 25, 25}, 4); 

當我這樣做,g.fillPolygon(closePol);什麼都不會發生,但是當我這樣做

g.fillPolygon(new int[] {getWidth() - 25, getWidth(), getWidth(), getWidth() - 25}, 
       new int[] {0, 0, 25, 25}, 4);` , 

我看到一個多邊形。爲什麼不是第一個工作?

+0

你從getWidth()中得到的值是多少?我打賭它不是25. –

+0

@MartinCarney它是500 – usama8800

+1

一個瘋狂的猜測:這可能是因爲你正在創建一個不同於你所在的地方的多邊形*繪製它,如果是這樣的話,那麼可能是當你創建它時, getWidth()方法仍然返回0,因爲該組件還不是visib樂。有疑問,發佈一個http://stackoverflow.com/help/mcve – Marco13

回答

2

的問題是可能的getWidth()closePol稱爲paintComponent方法的範圍外,所以當前寬度是不考慮(或可能仍然是零),這可能發生由於AA幾方面的原因。

作爲一般規則,繪畫時,您需要在paint[Component]()方法中調用getWidth()/getHeight()。例如,當展開框架時,如果getWidth()未用該方法調用,則不會考慮新的寬度,並且將不會對該圖形進行動態調整大小(如果這就是您想要的)

您也將想要在做定製繪畫時考慮覆蓋getPreferredSize(),以便給面板一些尺寸提示。