2013-08-06 59 views
0

我需要用的paintComponent幫助它dosent工作,請您幫:(PS:我所有的進口...Java paintComponent |圖形摹

public JavaGame() { 
    setVisible(true); 
    setSize(500, 500); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 
    setLocationRelativeTo(null); 
    setTitle("Java Game"); 
} 

public void paintComponent (Graphics g) 
{ 
    super.paintComponents(g); 
    g.drawString("Hello World!", 20, 20); 
} 

public static void main(String[] args) { 
      new JavaGame(); 
} 
+0

當你認爲你應該重寫一個關鍵方法時使用'@ Override'的另一個原因。 –

回答

3

的JFrame不是JComponent,它沒有一個paintComponent方法可以覆蓋。(添加@Override註解看到這一點)

而且它應該是

super.paintComponent(g); 

移動paintComponent方法來擴展一個新的類

@Override 
protected void paintComponent (Graphics g) { 
    super.paintComponent(g); 
    g.drawString("Hello World!", 20, 20); 
} 
+0

(Nit pick)個人來說,*「你知道paintComponent沒有被JFrame類覆蓋」*看起來不太好,我認爲更多沿着「JFrame」的行沒有一個叫做paintComponent的方法' - 因此你永遠不會被稱爲「可能會讀得更好 - 恕我直言。 +1無所謂 – MadProgrammer

2

的JFrame僅具有從java.awt.Container類繼承的paintComponents()方法,但一個JPanel具有從javax.swing.JComponent類繼承的方法paintComponent()。您希望使用後者來繪製大部分時間,但您的JavaGame類是JFrame子類。我建議你添加一個JPanel到JFrame並通過覆蓋paintComponent()來在標籤上繪製。

+0

您正走在正確的道路上,但我個人而言,我不會爲'JLabel'而煩惱,它可以滿足很多其他需求。我個人會使用'JPanel'作爲應用程序的基礎,它可以讓我重寫'paintComponent'方法。我想我可以看到你的建議的原因,但我認爲OP提供的代碼只是示例代碼,'drawString'只是一個測試 - 儘管我可能錯了;) – MadProgrammer

+0

@MadProgrammer感謝您的信息。我其實是指JPanel,我的手指只是將我的想法變成了愚蠢的按鍵。 – Kon

+0

我怎麼知道這種感覺:P – MadProgrammer