2015-05-09 21 views
-2

我的程序應該在Swing生成的面板上繪製一條簡單線條。除了由drawLine命令產生的一個錯誤之外,其他一切都很好。這是我的代碼:使用java.awt.Graphics創建線條時產生Java錯誤

public static void main(String[] args) { 
    JFrame f = new JFrame("Swing Paint Demo"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.pack(); 
    f.setVisible(true); 
    Graphics.drawLine(20,20,20,20); 
    } 
} 

它產生錯誤: 不能讓一個靜態引用從類型顯卡的非靜態方法的drawLine(INT,INT,INT,INT)。

任何想法?

在此先感謝

+4

您正試圖在不閱讀本教程的情況下進行圖形編程,只需編寫代碼即可,而且這種方式將無法工作。閱讀教程。這就是它的目的。您可以在這裏找到Swing教程和其他Swing資源的鏈接:[Swing Info](http://stackoverflow.com/tags/swing/info) –

回答

2

你需要創建一個擴展擺動小部件(我假設在這種情況下JPanel)要畫上一個類,並重寫paintComponent()方法(從繼承幾乎所有揮杆組件的父級 - JComponent)。

像這樣的事:

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

    g.drawLine(20, 20, 20, 20); 
} 

編輯: 原因你的錯誤是,你試圖使用從Graphics類的方法直接,而不是從它的一個實例。 Graphics類本身並不知道你的swing應用程序的任何內容,也不知道如何繪製它。 static的更好的解釋可以發現here。與上面相關的揮杆教程也值得一讀。

+0

儘管如此,但它更像是OP需要審查類和對象如何工作。 – Radiodef

+0

'paintComponent'應該是'protected'而不是'public',因爲您不應該不必要地增加繼承方法的可見性。你也應該更好地解釋什麼類有這種方法,應該繼承。你聲明他應該「創建一個擴展swing對象的類」,但什麼是「Swing對象」?這對新手來說很不清楚。 –