昨天我真的很努力地了解动作监听器。但是它仅适用于JComponent。您介意给我一些移动矩形位置的示例吗?
我知道如何覆盖框架和面板类。但是我听不懂动作侦听器。
在Java API上,它说面板可以调用方法addmouselistener,我们也可以将参数传递给该方法。我不知道(MouseListener l)是什么。顺便说一句,actionlistener和其他监听器(如addmouselistener)有什么区别。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Littlegame{
public static void main(String[]args)
{
Frame s = new Frame();
}
}
class Frame extends JFrame implements ActionListener
{
public Frame()
{
JFrame f = new JFrame("Little Game");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel a =new Panel();
f.add(a);
f.setSize(500,400);
f.setVisible(true);
}
}
class Panel extends JPanel{
public Panel()
{
setBorder(BorderFactory.createLineBorder(Color.green));
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawRect(150, 150, 30, 30);
g.setColor(Color.BLUE);
g.fillRect(150,150,30,30);
}
public void actionPerformed(ActionEvent e)
{
}
}
最佳答案
首先通读How to Write a Mouse Listener。
您的actionPerformed
方法不会执行任何操作,这不是因为您尚未附加会产生ActionEvent
的任何内容,而是因为您实际上尚未实现ActionListener
接口。看看How to write an action listener。
它的长短是。
将MouseListener
添加到Panel
。
调用mousePressed
(或mouseReleased
或mouseClicked
,取决于您的需要)时,请使用MouseEvent
确定事件发生的位置。
在某些实例变量中记录MouseEvent
的位置
致电repaint
调用paintComponent
时,请使用记录MouseEvent
位置的实例变量并更新矩形。
您可能还想通读Initial Threads