单击矩形表面时如何将矩形移动到随机位置?

时间:2014-01-24 02:30:38

标签: java swing paint mouselistener

昨天我真的很努力地去了解actionlistener。但它只适用于JComponent。你介意给我一些移动矩形位置的例子吗? 我知道如何覆盖框架和面板类。但我没有得到actionlistener的东西。 在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) 
     {

     }
}    

1 个答案:

答案 0 :(得分:2)

首先阅读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