我在互联网上搜索但无法找出为什么圆圈看起来在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);
}
}
答案 0 :(得分:0)
您永远不会在面板上致电init()
,因此您不会将MouseMotionListener
添加到面板中。尝试添加
t.init();
创建面板对象后。或者,在您的类中添加一个构造函数,而不是添加MouseMotionListener
,因此在创建类的对象时它是正确的:
public test1 () {
addMouseMotionListener(this);
}
答案 1 :(得分:0)
您需要致电
t.init();
注册MouseMotionListener
。另外super.paintComponent(g);
需要在paintComponent
方法中调用以重新绘制父容器,否则最后一个矩形将不会清晰可见。