2013-03-12 54 views
0

無論我做什麼,我都無法在屏幕上顯示矩形/線條/橢圓形。我檢查了他們在其中繪製圖形的其他來源,但是當我甚至執行這些代碼時,我沒有在窗口上顯示任何圖形。以下是教科書中的例子。圖形不出現

import java.awt.*; 
import javax.swing.*; 

class PlotGraph 
{ 
    public static void main (String [] args) { 
    JFrame win; 
    Container contentPane; 
    Graphics g; 

    win = new JFrame("testing"); 
    win.setSize(300,200); 
    win.setLocation(100,100); 
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    win.setVisible(true); 

    contentPane = win.getContentPane(); 
    g = contentPane.getGraphics(); 

    g.drawRect(10, 30, 50, 50); 

    } 

} 
+0

出於好奇,這是什麼書? – wchargin 2013-03-12 23:30:42

+0

面向Java的OOP與Thomas WU,第5版。頁面257 – razshan 2013-03-13 00:44:49

+0

我還在圖形上看到了這個視頻,但我得到的圖形沒有出現,但在視頻中它爲解釋它的人提供了同樣的問題 - http://www.youtube.com/watch?v=2l5-5PMUc5Y&list = PLFE2CE09D83EE3E28 – razshan 2013-03-13 00:52:15

回答

1

這不是圖形在Swing中的工作方式。

您需要將組件添加到您的框架中,而不僅僅是繪製它。你永遠不想直接在框架上畫畫。它沒有做任何事情的原因是因爲你的繪圖代碼被覆蓋。

如果您希望組件具有自定義繪圖代碼,請創建JComponent的子類並覆蓋paintComponent(Graphics)方法。如何你應該這方面的例子如下:

import java.awt.*; 
import javax.swing.*; 

class PlotGraph { 
    public static void main(String[] args) { 
     JFrame win; 

     win = new JFrame("testing"); 
     win.setSize(300, 200); 
     win.setLocation(100, 100); 
     win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     win.setVisible(true); 
     win.setContentPane(new MyComponent()); 
    } 

} 

class MyComponent extends JComponent { 

    @Override 
    public void paintComponent(Graphics g) { 
     g.drawRect(10, 30, 50, 50); 
    } 
} 

我會高度鼓勵你檢查出Java GUI tutorial在線。

+0

+1鏈接到Swing教程。 -1,用於在框架可見之後添加組件並且不在EDT上執行代碼。 – camickr 2013-03-13 00:14:27

+0

WChargin - 我有一個問題。它的工作原理,但如何調用paintComponent方法?就像什麼對象正在調用它..所有我看到我們創建了一個MyComponent類的新對象,它有一個void方法。如果我有多種方法會怎麼樣? – razshan 2013-03-13 00:49:57

+0

重繪經理確定/計劃繪畫。在[AWT&Swing中打開](http://www.oracle.com/technetwork/java/painting-140037.html)以獲取更詳細的描述 – MadProgrammer 2013-03-13 01:33:13

3

哎唷。你應該改變你的課本。首先,所有對Swing組件的訪問都必須在event dispatch thread中完成。

其次,你不應該得到一個組件的圖形和繪畫。相反,您應該擴展JComponent或JPanel,覆蓋它的paintComponent(Graphics)方法,並使用作爲參數傳遞的Graphics對象(實際上是Graphics2D實例)進行繪製。