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 回答