鼠标事件中的一个问题解决不了~~

来源:百度知道 编辑:UC知道 时间:2024/07/02 19:34:09
执行下面的程序时候, 为什么第一次按下鼠标时无法画出圆(或者说画出的圆被刷新掉了。。。为什么会这样? 该如何解决?)

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;

public class Object7
{
public static void main(String args[])
{
new NewFrame("Hello World");
}
}
class NewFrame extends JFrame
{
public NewFrame(String name)
{
super(name);

this.setBounds(100, 100, 800, 800);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addMouseListener(new NewMonitor());
}
public void paintComponent(Graphics g)
{
g.drawOval(0, 0, 500, 500);
}
class NewMonitor extends MouseAdapter
{
private int x, y;
public void mouseClicked(MouseEvent e)
{
x = e.getX();
y = e.getY();
getGr

调试了下,paint会在一个很诡异的地方被调用,但只有第一次才这样,原理我也讲不清楚,毕竟对awt的内部实现一点都不了解。。

这种情况,我的做法是,记录下所有圆的位置。在paint中一起画。每次点击鼠标就添加一个圆,然后调用repaint方法。

另外,你写了public void paintComponent(Graphics g),可能是想覆盖吧,但实际上,JFrame不是JComponent的子类,是没有paintComponent方法的,所以在这里其实只是自己定义了一个新的方法而已。