如何访问每个圈子属性?

时间:2012-02-14 00:23:56

标签: java swing

我正在尝试为课堂创建交通灯。我们不允许使用IDE,所以这是在文本垫中完成的。如何访问每个圆圈的属性,以便我可以制作一个红色,绿色,黄色?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Lab4Panel extends JPanel implements MouseListener {


public Lab4Panel(){
}

    JRadioButton red = new JRadioButton("Red", true);
    JRadioButton yellow = new JRadioButton("Yellow");
    JRadioButton green = new JRadioButton("Green");

int height, width;
int radius = 5;
int x = -1;
int y = -1;

protected void paintComponent(Graphics g){
    if (x<0 || y<0) {
        x = getWidth() / 2 - radius;
        y = getHeight() / 2 - radius;
    }
    super.paintComponent(g);
    g.drawRect(x - 5,y - 90, 40, 120);
    g.drawOval(x,y - 80, 4 * radius, 4 * radius);
    g.drawOval(x,y - 40, 4 * radius, 4 * radius);
    g.drawOval(x,y, 4 * radius, 4 * radius);

}




        public void mouseClicked(MouseEvent e)
            {
                if (e.getSource() == red){

                }

                else if (e.getSource() == yellow){

                }

                else if (e.getSource() == green){

                }



            }

    public void mouseExited(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseMoved(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
}

3 个答案:

答案 0 :(得分:2)

在您的情况下,涉及的重要可修改对象是Graphics对象g。在绘制每个椭圆之前更改g上的当前颜色:

g.setColor(Color.RED);
g.fillOval(x,y - 80, 4 * radius, 4 * radius);
g.setColor(Color.YELLOW);
g.fillOval(x,y - 40, 4 * radius, 4 * radius);
g.setColor(Color.GREEN);
g.fillOval(x,y, 4 * radius, 4 * radius);

使用fillOval()javadoc填充椭圆而不是仅绘制轮廓。

答案 1 :(得分:1)

您可以在绘图环境中设置颜色:g.setColor( new Color( 255,0,0 ) )

答案 2 :(得分:1)

使用Graphics#setColor方法设置当前颜色。然后所有后续的绘图操作都会使用该颜色,直到更改为止。

此外,您还需要使用Graphics#fillOval方法绘制当前颜色的实心圆。

您的代码将变为:

g.drawRect(x - 5,y - 90, 40, 120);
g.setColor(Color.RED);
g.fillOval(x,y - 80, 4 * radius, 4 * radius);
g.setColor(Color.YELLOW);
g.fillOval(x,y - 40, 4 * radius, 4 * radius);
g.setColor(Color.GREEN);
g.fillOval(x,y, 4 * radius, 4 * radius);

我的颜色可能不按顺序排列,但总的想法仍然存在。