0

私は3つのボタンを持っていて、それらを追加し、それぞれにアクションリスナーを持っています. アクション実行セクションでは、g.setcolor を特定の色に変更し、楕円形を再描画することになっています。私は何を間違っていますか?

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class  zzz extends Applet implements ActionListener {

  Button a, b, c;

  public void init()
  {
  setLayout(new FlowLayout());

  a = new Button("Red");
  b = new Button("Blue");
  c = new Button("Green");
  add(a);
  add(b);
  add(c);
  a.addActionListener(this);
  b.addActionListener(this);
  c.addActionListener(this);

  }

  public void paint(Graphics g){

  g.drawOval(250,100,100,100);
  g.drawString("Circle",275,100);
  g.setColor(Color.white);
  g.fillOval(250,100,100,100);


  }

  public void actionPerformed (ActionEvent evt)
  {
  if (evt.getSource() == a){
  g.setColor(Color.red);
  repaint(); 
  }
  else if (evt.getSource() == b){
  g.setColor(Color.blue);
  repaint(); 
  }
  else if (evt.getSource() == c){
  g.setColor(Color.green);
  repaint(); 
  }
  }
} 
4

1 に答える 1

1
  1. これは、塗装が行われる方法ではありません。
  2. 最上位のコンテナに直接ペイントすることは避けるべきです

gメソッドのコンテキストから定義されていないを変更しようとする代わりにactionPerformed、現在の色を示す変数を設定する必要があります。

public void actionPerformed (ActionEvent evt)
{
    if (evt.getSource() == a){
        drawColor = Color.red;
    }
    else if (evt.getSource() == b){
        drawColor = Color.blue;
    }
    else if (evt.getSource() == c){
        drawColor = Color.green;
    }
    repaint();
}

次に、ペイントメソッドを更新して、より似たものにする必要があります....

public void paint(Graphics g){
    super.paint(g);
    g.setColor(drawColor);
    g.drawOval(250,100,100,100);
    g.drawString("Circle",275,100);
    g.setColor(Color.white);
    g.fillOval(250,100,100,100);
}
于 2013-05-01T04:37:53.003 に答える