Java 如何访问每个圆的属性?

Java 如何访问每个圆的属性?,java,swing,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(){ }

我正试着为班级设置一个交通灯。我们不允许使用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){}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.Random;
公共类Lab4Panel扩展JPanel实现MouseListener{
公共Lab4Panel(){
}
JRadioButton red=新的JRadioButton(“红色”,true);
JRadioButton yellow=新的JRadioButton(“黄色”);
JRadioButton绿色=新JRadioButton(“绿色”);
int高度、宽度;
int半径=5;
int x=-1;
int y=-1;
受保护组件(图形g){

如果(x在绘图上下文中设置颜色:
g.setColor(新颜色(255,0,0))
在绘图上下文中设置颜色:
g.setColor(新颜色(255,0,0))
使用该方法设置当前颜色。然后所有后续绘图操作都使用该颜色,直到更改为止

此外,您还需要使用该方法以当前颜色绘制实心圆

然后,您的代码会变成:

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);
我可能把颜色弄乱了顺序,但总的想法仍然存在。

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

此外,您还需要使用该方法以当前颜色绘制实心圆

然后,您的代码会变成:

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);

我可能把颜色弄乱了,但总的想法仍然存在。

在您的情况下,重要的可修改对象是
图形
对象
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);

用于填充椭圆形,而不仅仅是绘制轮廓。

在您的情况下,重要的可修改对象是
图形
对象
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);


用于填充椭圆形,而不是仅绘制轮廓。

这不会将每个圆更改为相同的颜色吗?是的,因此您必须更改每次绘制的背景颜色。啊,好的,我知道了,我如何填充它,使其看起来像交通灯其他人给了您代码。(我本来不打算给你的,因为那是家庭作业,但不管怎样:)谢谢,我还在努力理解我在做什么。我想在六月份找份工作=)这不会把每个圆圈都变成相同的颜色吗?是的,所以你必须改变每一张画的背景颜色。啊,好吧,我明白了,我该如何填充它,使它看起来像交通灯。其他人给了你代码。(我不会给你,因为它是家庭作业,但无论如何:))是的,谢谢。我仍在努力了解我在做什么。我想在6月份找到一份工作=),这样我就可以对活动灯光使用Fillova,对当前未活动的灯光使用drawOval?不需要执行“new Color(Color.RED)”,“g.setColor(Color.RED)”意志suffice@paislee颜色上没有复制构造函数。此代码将不会编译。因此,我可以对活动灯光使用fillOval,对当前未活动的灯光使用drawOval?无需执行“新建颜色(Color.RED)”,“g.setColor(Color.RED)”意志suffice@paislee颜色上没有复制构造函数。此代码不会编译。因此,我可以对活动灯光使用fillOval,对当前未活动的灯光使用drawOval?–@paislee Color.RED/YELLOW/GREEN是在Color类上定义的预实例化颜色实例。它们肯定是对象,代码肯定是compile。所以我可以对活动灯光使用fillOval,对当前未活动的灯光使用drawOval?–@paislee Color.RED/YELLOW/GREEN是在Color类上定义的预实例化颜色实例。它们肯定是对象,代码肯定会编译。