Java 绘制图形和事件处理

Java 绘制图形和事件处理,java,graphics,event-handling,jframe,actionlistener,Java,Graphics,Event Handling,Jframe,Actionlistener,我试图写一个程序,在屏幕上画一个圆圈,然后给你3个按钮(红色、黄色和绿色),点击按钮相应地改变圆圈的填充颜色 我想我很接近了,我只是不知道如何创建一个方法来画圆和改变颜色。我可以写一个方法来画和填充一个圆,我只是在将它与jbutton合并时遇到了问题 这就是我到目前为止所做的: (忽略未使用的导入) 采取了不同的方法,我不知道是否更好。我的按钮显示和一切只是有问题改变颜色。事实上,现在我甚至不能显示一个圆圈。我知道我需要调用repaint()在我的eventhandler中,我只是不知道如何做

我试图写一个程序,在屏幕上画一个圆圈,然后给你3个按钮(红色、黄色和绿色),点击按钮相应地改变圆圈的填充颜色

我想我很接近了,我只是不知道如何创建一个方法来画圆和改变颜色。我可以写一个方法来画和填充一个圆,我只是在将它与jbutton合并时遇到了问题

这就是我到目前为止所做的:

(忽略未使用的导入)


采取了不同的方法,我不知道是否更好。我的按钮显示和一切只是有问题改变颜色。事实上,现在我甚至不能显示一个圆圈。我知道我需要调用
repaint()在我的eventhandler中,我只是不知道如何做。这是星期天,我花了这么多时间看视频和阅读示例,我就是不能让我的工作。我相信这很简单,但这让我很沮丧

  public class test3 extends JPanel {

JRadioButton RED, YELLOW, GREEN; 
Color currentColor;          


public void paintComponent(Graphics g){

    currentColor= Color.RED; 

        super.paintComponent(g);
        this.setBackground(Color.WHITE);

        g.setColor(currentColor);
        g.fillOval(50, 50, 100, 100);    
       }






public static void main(String[] args) {

  test3 frame = new test3();
  frame.setSize(500,500);

  frame.setVisible(true);
    }

public test3 (){

JPanel jpRadioButtons=new JPanel();
jpRadioButtons.setLayout(new GridLayout(1,1));
jpRadioButtons.add(RED=new JRadioButton("RED"));
jpRadioButtons.add(GREEN=new JRadioButton("GREEN"));
jpRadioButtons.add(YELLOW=new JRadioButton("YELLOW"));

add(jpRadioButtons, BorderLayout.SOUTH);


ButtonGroup group=new ButtonGroup();
group.add(RED);
group.add(YELLOW);
group.add(GREEN);

GREEN.addActionListener(new ActionListener()
{
    public void actionPerormed(ActionEvent e)
    {        

        currentColor = Color.GREEN;
     repaint();           
    }
      });

   }
}
  • 引入一个类变量/属性/。。。使用圆的当前颜色
  • 在eventhandler中设置此变量
  • 在eventhandler中也调用“repaint();”
  • 重写
    paintComponent()
    方法,并使其以颜色绘制一个圆,可以从类变量中读取
  • 您的
    paintComponent(Graphics g)
    可能如下所示:

    @Override
    void paintComponent(Graphics g)
    {
      g.setColor(currentColor);
      g.drawOval(50,50,100,100);
    }
    

    你通过考试了吗?这就是我的出发点,因为如果你不知道如何画圆,你就死在水里了。提示:您缺少了最重要的方法,
    paintComponent(…)
    。我的所有代码都没有在原始帖子中复制,对此我深表歉意。我已经有“画画组件”课程了。。。我仍然不确定如何使用“repaint()”方法。我需要传入参数吗?我是否在eventhandler类中重写“paintComponet()”?我编辑了原始帖子以包含我的“paintComponet”class@user1789951:您需要通过一个变量设置颜色,如Simon“说”(1+到Simon),而不是像现在这样硬编码为
    Color.blue
    。不,事件处理程序没有paintcomponent方法。只有从JComponent派生的类,比如JPanel。你应该投票给Simon的答案(就像我做的那样),因为它非常有用。你可以调用
    repaint()
    就像那样,在没有参数的情况下,在更改变量后,强制使用新颜色重新绘制圆。并且,正如HoverCraftfullOfels已经解释的,您在正确的位置声明了
    paintComponent
    方法。有人可以进一步研究重新绘制方法吗?我仍然不太明白?可能是一个代码示例?。。。我有我的paintComponet方法,我将颜色设置为一个变量“currentColor”,并使用该变量进行绘制。然后在我的动作侦听器中,我只需将当前颜色变量更改为我想要的颜色,并调用“repaint();“我不能让它工作