【发布时间】:2022-01-02 13:37:20
【问题描述】:
我为JPanel 写了一个MouseMotionListener,但我对如何使用它感到困惑。
使用aWindow.add(new MouseMotionEvents()) 将监听器类添加到框架时效果很好,但是当我尝试使用content.add(new MouseMotionEvents()) 将它添加到面板时,它不起作用。我是 Swing 和 JComponents 的新手,有人能给我一些提示吗?
public class test {
public static void main(String[] args) {
JFrame aWindow = new JFrame();
aWindow.setBounds(600, 600, 600, 600);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content = new JPanel();
content.add(new MouseMotionEvents());
aWindow.add(content);
aWindow.setVisible(true);
}
}
class MouseMotionEvents extends JPanel implements MouseListener,
MouseMotionListener {
Point p;
Point r;
public MouseMotionEvents() {
addMouseListener(this);
addMouseMotionListener(this);
}
public void mouseClicked(MouseEvent me) {
// p = me.getPoint();
// repaint();
}
public void mouseEntered(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
public void mousePressed(MouseEvent me) {
p = me.getPoint();
// repaint();
}
public void mouseReleased(MouseEvent me) {
r = me.getPoint();
repaint();
}
public void mouseDragged(MouseEvent me) {
r = me.getPoint();
repaint();
}
public void mouseMoved(MouseEvent me) {
}
public void paint(Graphics g) {
if (p != null && r != null) {
Dimension d = getSize();
int xc = d.width / 2;
int yc = d.height / 2;
if(p.getX()-r.getX()>0 && p.getY()-r.getY()>0){
g.drawRect((int)p.getX(), (int)p.getY(), (int)(p.getX()-r.getX()), (int)(p.getY()-r.getY()));
}
if(p.getX()-r.getX()>0 && p.getY()-r.getY()<0){
g.drawRect((int)p.getX(), (int)p.getY(), (int)(p.getX()-r.getX()), (int)(-p.getY()+r.getY()));
}
if(p.getX()-r.getX()<0 && p.getY()-r.getY()>0){
g.drawRect((int)p.getX(), (int)p.getY(), (int)(-p.getX()+r.getX()), (int)(p.getY()-r.getY()));
}
if(p.getX()-r.getX()<0 && p.getY()-r.getY()<0){
g.drawRect((int)p.getX(), (int)p.getY(), (int)(-p.getX()+r.getX()), (int)(-p.getY()+r.getY()));
}
}
}
}
【问题讨论】:
-
覆盖paintComponent而不是paint。
-
如果还是不行,在repaint()之前调用invalidate()。
-
还是不行,
-
“它仍然不起作用”不要告诉我们什么不起作用。什么不工作?
-
我只是浏览了其他人的帖子,他们使用类似“jpanel.addMouseMotionListener(new MouseMotionAdapter() { ... })”的东西,但我写的类只是实现了 MouseListener 和 MouseMotionListener,做你认为这是个问题吗?
标签: java swing jframe jpanel mousemotionlistener