我想解決以下問題:編寫一個顯示奧運五環的程序。用奧林匹克顏色對環進行着色。提供一種繪製給定位置和顏色的環的方法。創建自定義方法繪製 - 圖形2D g2爲空
我有一個主要問題,我的理解是如何完全對象的圖形工作。我最初嘗試使用getGraphics()
將它作爲參數傳遞給該方法,但是我發現通常可以避免使用此方法,因爲可能會發生空例外情況。所以我讀到你應該重寫組件類中的paintComponent
方法?所以我試圖通過創建一個包含重寫和我的drawRing
方法的類,使Graphics2D g2成爲一個實例變量,但是我仍然在drawRing
的第一行中調用它時收到空錯誤。我一直試圖找出幾個小時,但我真的不知道如何解決這個問題,使該方法可以訪問主框架,如果有一個完全不同的方式我應該解決它。任何幫助深表感謝。
而且,我只是想指出,我還沒開始佔x和y在我drawRing
方法座標以及顏色,我首先要確保該程序可以訪問該方法時,它可以畫在主要的首先製作的框架上,之後我將這些細節描繪得相當簡單。
我的代碼:
import javax.swing.*;
import java.awt.*;
import java.applet.*;
import java.awt.geom.*;
public class test{
public static class ringComponent extends JComponent{
private Graphics2D g2;
public void paintComponent(Graphics g){
g2 = (Graphics2D) g;
}
public void drawRing(){
g2.setColor(Color.RED);//Null error here
Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 200, 200);
g2.draw(circle);
}
}
public static void main(String[] args){
JFrame frame = new JFrame();
final int FRAME_WIDTH = 800;
final int FRAME_HEIGHT = 800;
frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
frame.setTitle("Olympic Rings");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ringComponent rc = new ringComponent();
rc.drawRing();
frame.add(rc);
frame.setVisible(true);
}
}
這實際上是我學會繪製的方式,但這樣做我不能做一個單獨的方法,可以採取座標和字符串作爲參數,這是我的問題的來源,因爲我不能改變paintComponent的參數。 – Reddy
'我不能做一個單獨的方法,可以座標和字符串作爲參數' - 確定你可以。您可以將任何方法添加到您想要自定義繪畫的課程中。這就是Swing組件的工作原理。諸如setText(),setForeground(),setBackground()之類的方法都會影響組件的繪製方式。如果你有特殊的繪畫要求,那麼你可以創建適當的「setter」方法,讓你改變這些值。然後在setter方法中調用'repaint()',組件將重新繪製自己。 – camickr
所以,如果有可能在課堂上做出我自己的方法,我會如何去做呢?如果我在paintComponent方法中聲明瞭方法,我得到了表達式錯誤的非法開始,並且在外面聲明它正是我在上面嘗試的那個方法不起作用。 – Reddy