[英]Associating a MouseListener with a JComponent
我在这里的问题是,当本地类MouseClickListener
调用moveTo
的方法comp
对象,我们之前做: comp.addMouseListener(listener);
,那么为什么要后者呢?
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Scratch {
public static void main(String[] args) {
JFrame frame = new JFrame("Moving Rectangle");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final MyComponent comp = new MyComponent();
class MouseClickListener implements MouseListener {
public void mousePressed(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseClicked(MouseEvent event) {
int x = event.getX();
int y = event.getY();
comp.moveTo(x, y);
}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}
MouseListener listener = new MouseClickListener();
comp.addMouseListener(listener);
frame.add(comp);
frame.setVisible(true);
}
}
class MyComponent extends JComponent {
private Rectangle box;
public MyComponent() {
box = new Rectangle(0,0,50,50);
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.draw(box);
}
public void moveTo(int x, int y) {
box.setLocation(x,y);
repaint();
}
}
通过调用comp.addMouseListener(listener);
您指定使用定义的listener
实现listener
组件comp
。
根据您的编辑,您想知道为什么要按该顺序调用。
实际上,这是实例化listener
后的第一条语句,因此之前无法完成。 如果您尝试侦听非实例化的侦听器,它将失败。
MouseListener listener = new MouseClickListener();
comp.addMouseListener(listener);
请注意,如果您不打算重复使用监听器,则只需
comp.addMouseListener(new MouseClickListener());
您一定不能依赖于内部类的声明位置,可以在该部分之前添加侦听器。 但是,您不能忽略将其分配给您的组件,只是声明该类不会直接侦听每个对象。 需要分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.