1

アプレットを使用してプログラムを作成する必要があります.3つのボタンライン、長方形、円が必要です。それらをクリックすると、目的の形状が描画されます。

次のコードを書きましたが、Graphics が初期化されていないというエラーが表示されます。今何をする?

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Drawshapes extends Applet implements ActionListener
{

    Button line,rect,circle;
    public void init()
    {

        line=new Button("Line");

        rect=new Button("Rectangle");
        circle=new Button("Circle");

        add(line);
        add(circle);
        add(rect);

        line.addActionListener(this);
        rect.addActionListener(this);
        circle.addActionListener(this);
    }

    public void paint(Graphics g)
    {
    }

    public void actionPerformed(ActionEvent ae)
    {

        Graphics g;
        if(ae.getSource()==line)
        {
            g.drawLine(0,100,100,10);
        }
        else if(ae.getSource()==rect)
            {
                g.drawRect(10,10,60,50);
            }
        else
        {
                g.drawOval(10,10,50,50);
        }
    }
}
4

3 に答える 3

2

すべてのローカル変数と同様に、Graphics gを初期化する必要があります。ただし、 からカスタム ペインティングを行うのActionListenerはお勧めできません。適切にインスタンス化されGraphicsたメソッド内のオブジェクトを使用してください。paint

にフラグを設定してから、次のActionListenerように呼び出しますrepaint

たとえば、ActionListenerfor 行で:

drawLine = true;
repaint();

ペイント:

@Override
public void paint(Graphics g) {
   super.paint(g);
   if (drawLine) {
      g.drawLine(0, 100, 100, 10);
   } else if (drawRect) {
      g.drawRect(10, 10, 60, 50);
   } else {
      g.drawOval(10, 10, 50, 50);
   }
}
于 2013-03-15T22:40:47.290 に答える
0

参照を初期化していませんGraphics。から継承したgetGraphics()メソッドを呼び出すことで初期化できます。AppletComponent

Graphics g = getGraphics();
于 2013-03-15T22:38:52.563 に答える
0

エラーが示すように、 が初期化されていないメソッドを呼び出しgています。宣言しただけです。

編集:他の人が言ったように、あなたのGraphicsオブジェクトはのメンバーでありApplet、メソッドからアクセスできますgetGraphics。したがって、必要なときにいつでもこのメソッドを呼び出すか、DrawShapesクラスにメンバーを作成できます。

Graphics g = getGraphics();
public void actionPerformed(ActionEvent ae)
{
    if(ae.getSource()==line)
    {
        g.drawLine(0,100,100,10);
    }
    // etc
}
于 2013-03-15T22:42:15.623 に答える