[英]Can't add ActionListener to a JPanel?
I've been trying for over a hour to test a simple program to change the color of a ball on click , when I try myPanel.addActionListener(new BallListener())
, i get one error during compile time 我已经尝试了一个多小时测试一个简单的程序来改变点击球的颜色,当我尝试myPanel.addActionListener(new BallListener())
,我在编译时遇到一个错误
Please help me spot the error? 请帮我发现错误?
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 don't support ActionListener
s because they don't have a natural action. JPanel
不支持ActionListener
因为它们没有自然动作。 For buttons, the natural action is clicking on them, so it makes sense to have an ActionListener
that fires when they are clicked. 对于按钮,自然动作是单击它们,因此有一个ActionListener
在单击时触发是有意义的。 JPanel
s are not buttons. JPanel
不是按钮。
If you want to detect clicks on a JPanel
, you need to add a MouseListener
, not an ActionListener
. 如果要检测JPanel
上的点击,则需要添加MouseListener
,而不是ActionListener
。
对于面板事件,您可以使用WindowListener覆盖WindowsClosing方法等,ActionListener不用于框架或面板等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.