执行我下面的这段代码后,为什么 在第一次点击鼠标时 无法画出圆, 再点击第二次时才能画出圆?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();
getGraphics().fillOval(x, y, 50, 50);
}
}
}

解决方案 »

  1.   


    被 public void paintComponent(Graphics g) 中的 g.drawOval(0, 0, 500, 500) 刷新掉了?那该怎么解决?
      

  2.   

    用双缓冲解决,先将图形绘制到一张BufferedImage中,然后在paintComponent(Graphics g)中把BufferedImage绘制到Graphics
      

  3.   


    可以的LZ的JDK啥版本哦.俺1.5可以的
      

  4.   


    class NewFrame extends JFrame {
    private BufferedImage bufImg = 
    new BufferedImage(800, 800, BufferedImage.TYPE_INT_RGB);
    public NewFrame(String name) {
    super(name); this.setBounds(100, 100, 800, 800);
    this.setResizable(false);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
    bufImg.getGraphics().fillOval(e.getX(), e.getY(), 50, 50);
    repaint();
    }
    });
    this.setVisible(true);
    } @Override
    public void paint(Graphics g) {
    g.drawImage(bufImg, 0, 0, null);
    }
    }看上面的带缓冲的代码,即使窗体没最小化再正常显示你画的圆也不会消失。
    有个小问题,JFrame没继承自JComponent,没有paintComponet方法。
    还有mouseClicked改为mousePressed一般就不会出现第一次点击画不出来的情况了,鼠标按下和弹起之间位置没移动的情况下mouseClicked才会被执行。