0

我在整个互联网上进行了搜索,但找不到为什么圆圈似乎在 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);
}
}
4

2 回答 2

0

您永远不会调用init()您的面板,因此您不会将其添加MouseMotionListener到面板中。尝试添加

t.init();

创建面板对象后。或者,向您的类添加一个构造函数来添加MouseMotionListener,因此当您创建该类的对象时它会正确添加:

public test1 () {
    addMouseMotionListener(this);
}
于 2014-12-15T17:16:50.840 回答
0

你需要打电话

t.init();

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

于 2014-12-15T17:19:12.913 回答