【问题标题】:drawing graphics and event handling绘制图形和事件处理
【发布时间】:2012-10-31 23:06:05
【问题描述】:

我正在尝试编写一个程序,在屏幕上绘制一个圆圈,然后为您提供 3 个按钮(红色、黄色和绿色),然后单击该按钮会相应地更改圆圈的填充颜色。

我想我已经接近了,我只是不知道如何实际创建一个绘制圆圈并更改颜色的方法。我可以编写一个方法来绘制和填充一个圆圈我只是在将它与 jbutton 合并时遇到问题

这是我目前所拥有的:

(忽略未使用的导入)


采取了不同的方法,我不知道它是否更好。我的按钮显示,一切都只是在改变颜色时遇到问题。其实现在我什至不能显示一个圆圈。我知道我需要在我的事件处理程序中调用repaint(); 我只是不知道该怎么做。这是由于星期天我花了这么多时间看视频和阅读示例我只是无法让我的工作。我敢肯定它很愚蠢,但它让我很沮丧!

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

   }
}

【问题讨论】:

  • 你通过Swing drawing tutorials了吗?这就是我要开始的地方,因为如果你不知道如何画一个圆圈,你就死在水里了。提示:你错过了最重要的方法,paintComponent(...)

标签: java graphics event-handling jframe actionlistener


【解决方案1】:
  1. 引入一个类变量/属性/...与当前圆的颜色。
  2. 在您的事件处理程序中设置此变量
  3. 也调用“repaint();”在您的事件处理程序中
  4. 重写paintComponent()方法,让它画一个圆的颜色,你可以从类变量中读取。

您的paintComponent(Graphics g) 可能如下所示:

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

【讨论】:

  • 我的所有代码都没有在原始帖子中被复制,对此我深表歉意。我已经有了“paintComponent”类...我仍然不确定如何使用“repaint()”方法。我需要传入参数吗?我是否在我的事件处理程序类中覆盖“paintComponet()?
  • 我编辑了原始帖子以包含我的“paintComponet”类
  • @user1789951:您需要通过变量设置颜色,如西蒙“说”(1+ 到西蒙),而不是像您正在做的那样将其硬编码为 Color.blue。不,事件处理程序没有paintComopnent 方法。仅从 JComponent 派生的类,例如 JPanel。您应该投票赞成西蒙的答案(就像我所做的那样),因为它非常有帮助。
  • 你可以像这样调用repaint();,不带参数,改变变量后,强制用新颜色重新绘制圆圈。而且,正如 HovercraftFullOfEels 已经解释的那样,您在正确的位置声明了 paintComponent 方法。
  • 谁能进一步研究重绘方法?我还是不太明白?也许是一个代码示例?...我有我的paintComponet 方法,我将颜色设置为一个变量“currentColor”并使用它来绘画。然后在我的动作监听器中,我只需将当前颜色变量更改为我想要的颜色并调用“repaint();”我无法让它工作
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2011-09-30
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多