如何在java中组合MouseMotionListener和JPanel

时间:2014-12-15 17:15:03

标签: java awt mousemotionlistener

我在互联网上搜索但无法找出为什么圆圈看起来在JFrame中间变形(对不起,没有图像,因为我需要10个声望才能发布图像)。 我检查了我的代码但发现没有错误。我是java GUI编程的新手。 到目前为止,这是我的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test1 extends JPanel implements MouseMotionListener
{

private static final long serialVersionUID = -2068330714634802982L;
public int Mousex,Mousey;
public void init()
{
    addMouseMotionListener(this);
}
public void mouseMoved(MouseEvent e)
{
     Mousex=e.getX();
     Mousey=e.getY();
    repaint();
}
public void mouseDragged(MouseEvent e){}


 public void paintComponent(Graphics g)
{
    Graphics2D g2=(Graphics2D)g;
    g2.setColor(Color.GREEN);
    g2.fillOval(Mousex,Mousey,50,50);

}


public static void main(String[] args)
{   
    test1 t=new test1();
    JFrame frame=new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(1305,650);
    frame.setLocationRelativeTo(null);
    frame.getContentPane().add(t);
    frame.setResizable(true);
    frame.setVisible(true);
}
}

2 个答案:

答案 0 :(得分:0)

您永远不会在面板上致电init(),因此您不会将MouseMotionListener添加到面板中。尝试添加

t.init();
创建面板对象后

。或者,在您的类中添加一个构造函数,而不是添加MouseMotionListener,因此在创建类的对象时它是正确的:

public test1 () {
    addMouseMotionListener(this);
}

答案 1 :(得分:0)

您需要致电

t.init();

注册MouseMotionListener。另外super.paintComponent(g);需要在paintComponent方法中调用以重新绘制父容器,否则最后一个矩形将不会清晰可见。