Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';不能将ActionListener添加到JPanel?_Java_Swing_Event Handling_Jpanel_Actionlistener - Fatal编程技术网

Java Can';不能将ActionListener添加到JPanel?

Java Can';不能将ActionListener添加到JPanel?,java,swing,event-handling,jpanel,actionlistener,Java,Swing,Event Handling,Jpanel,Actionlistener,我已经尝试了一个多小时来测试一个简单的程序,在单击时更改球的颜色,当我尝试myPanel.addActionListener(new BallListener())时,我在编译时遇到一个错误 请帮我找出错误 myPanel.addActionListener(new BallListener()); ^ symbol: method addActionListener(Ball.BallListener) location: variable myPanel of ty

我已经尝试了一个多小时来测试一个简单的程序,在单击时更改球的颜色,当我尝试
myPanel.addActionListener(new BallListener())
时,我在编译时遇到一个错误

请帮我找出错误

myPanel.addActionListener(new BallListener());
       ^
  symbol:   method addActionListener(Ball.BallListener)
  location: variable myPanel of type MyPanel
1 error





//first Java Program on the new VM
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.util.*;

    public class Ball{

    private MyFrame myFrame;
    private MyPanel myPanel;

    public static void main(String[] args)
    {
    Ball ball=new Ball();
    ball.go();

    }//main ends

    public class BallListener implements ActionListener{

    public void actionPerformed(ActionEvent e)
    {
    myFrame.repaint();
    }

    }//listener ends

    public void go()
    {

    myPanel=new MyPanel();
    //myPanel.addActionListener(new BallListener());
    myFrame=new MyFrame();
    myFrame.add(BorderLayout.CENTER,myPanel);
    myFrame.setVisible(true);
    }

    }//class ends



    //ball panel
    class MyPanel extends JPanel
    {
    public void paintComponent(Graphics g)
    {
    Graphics2D g2d=(Graphics2D)g;
    Ellipse2D ellipse=new Ellipse2D.Double(200,200,400,400);
    int r=(int)Math.random()*256;
    int b=(int)Math.random()*256;
    int g1=(int)Math.random()*256;
    Color color=new Color(r,g1,b);
    g2d.setPaint(color);
    g2d.fill(ellipse);
    }
    }//Class ends

    //a simple JFrame
    class MyFrame extends JFrame{

    public MyFrame()
    {
    setSize(600,600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    }
    }//class ends

JPanel
s不支持
ActionListener
s,因为它们没有自然动作。对于按钮,自然的动作是单击它们,因此有一个
ActionListener
在单击按钮时触发是有意义的
JPanel
s不是按钮


如果要检测对
JPanel
的点击,则需要添加
MouseListener
,而不是
ActionListener
,对于面板事件,您可以使用WindowListener覆盖窗口关闭方法等 ActionListener不用于框架或面板等。您认为面板提供什么操作?面板不提供任何操作,因此不接受
ActionListener
。因此,它没有“addActionListener”方法。