java在鼠标单击时绘制一个圆

java在鼠标单击时绘制一个圆,java,swing,java-2d,Java,Swing,Java 2d,我正在写一个程序,当点击鼠标时,会画一个圆。下面是我迄今为止编写的代码 import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.event.*; i

我正在写一个程序,当点击鼠标时,会画一个圆。下面是我迄今为止编写的代码

import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.event.*;
import java.awt.geom.*;

public class test extends JFrame implements ActionListener, MouseListener {
    Shape circle = new Ellipse2D.Float(10, 10, 10, 10);

    public test () {
        setSize(250,150);
        addMouseListener(this);
    }

    public static void main(String[] args) {
        //TODO code application logic here
        java.awt.EventQueue.invokeLater(new Runnable() {
              public void run() {
                   test frame = new test();
                   frame.setVisible(true);
              }
        });
    }

    public void actionPerformed(ActionEvent ae) {

    }

    public void drawCircle(int x, int y) {
        Graphics g = this.getGraphics();
        g.drawOval(x, y, x, y);
        g.setColor(Color.BLACK);
        g.fillOval(x, y, 2, 2);
    }

    public void mouseClicked(MouseEvent e) {
        drawCircle(e.getX(), e.getY());
        repaint();
    }

    public void mouseExited(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }
}

代码是一个400X400的jframe,当点击打开以半秒的速度显示一个圆圈时,问题是,当我松开鼠标时,圆圈消失了。为什么?

当调用
repaint()
时,组件会从头开始重新绘制。你的圆圈被抹去了。您需要覆盖每次绘制组件时调用的
paintComponent(Graphics)

鼠标单击(…)
更改为:

int x, y;

public void mouseClicked(MouseEvent e) {
    x = e.getX();
    y = e.getY();

    repaint();
}
覆盖
绘制(…)


您还可以将所有绘制的圆保存在数组或列表中并重新绘制它们everytime@Traxdata:是的,我想提一下,但这个问题好像是家庭作业问题,所以我把它留给了他又被困了…:无论如何,如果是家庭作业,重写paintComponent(Graphics)会太难注意OP是在顶级容器中绘制的
JFrame
和其他TLC没有
paintComponent(图形)
方法。OTOH最好不要在TLC中覆盖
paint(Graphics)
,而是使用
JComponent
JPanel
——它有
paintComponent(Graphics)
方法。这种getGraphics混乱是怎么传播开来的?一个教师疯了?
@Override
public void paint(Graphics g) {
    drawCircle(x, y);
}