昨天我真的很努力地了解动作监听器。但是它仅适用于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(或mouseReleasedmouseClicked,取决于您的需要)时,请使用MouseEvent确定事件发生的位置。
在某些实例变量中记录MouseEvent的位置
致电repaint
调用paintComponent时,请使用记录MouseEvent位置的实例变量并更新矩形。


您可能还想通读Initial Threads

10-07 19:43
查看更多