2013-07-16 42 views
0

我正在編寫一個java程序,您可以在其中輸入長度並輸入矩形的寬度並輸出周長和麪積。但現在,我想這個數字。但是我不知道如何在按下按鈕時繪製它。它應該是這樣的?:如何在java中按下按鈕時繪製方形

public void paintComponent(Graphics g) { 
    paintComponent(g); 
    g.setColor(Color.blue); 
    g.drawRect(10, 10, 80, 30);  
} 

public void actionPerformed(ActionEvent e) { 
    paintComponent(); 
} 

因爲當我這樣做,它給了我一個錯誤說:

method paintComponent in class Rectangles cannot be applied to given types; 
required: Graphics 
found: no arguments 

所以,我真的不知道該怎麼辦。

回答

4

不,您不應該直接致電paintComponent。無論如何,該方法將自動調用,所以在點擊之前將繪製方塊。

你可以使用一個布爾標誌,以表明您點擊的按鍵,調repaint()後重繪請求:

boolean clicked = false; 

public void paintComponent(Graphics g) { 
    if (clicked) { 
     g.setColor(Color.blue); 
     g.drawRect(10, 10, 80, 30); 
    } 
} 

public void actionPerformed(ActionEvent e){ 
    clicked = true; 
    repaint(); 
} 

此外,從未讓一個方法調用本身具有完全相同的參數。這削減了

public void paintComponent(Graphics g) { 
    paintComponent(g); 

將無限地經常調用相同的功能(或直到堆棧已滿)。

我想你看到某處以下:

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

這是確定的,它會調用父類的paint方法。它可能不會做任何事情,所以不應該傷害它(但它也不會)。

+0

謝謝,但是當我這樣做時,它給了我一個'java.lang.StackOverflowError'。我不知道爲什麼。 – DLJ

+0

@DLJ我沒有說清楚,但是我從'paintComponent'中刪除了對'paintComponent(g);'的調用。你應該做同樣的:)(或者把它作爲'super.paintComponent(g)') –

+0

我已經完成了(謝謝),但現在我看不到它了。 – DLJ

相關問題