Java drawing a circle at the click of a mouse

I am writing a program that, when you click the mouse, it types a circle. Below is the code that I have written so far.

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) { } } 

The code is a 400X400 jframe, when you click on it, a circle opens in half a second. The problem is that when I release the mouse, the circle disappears. why?

+6
source share
2 answers

Change your mouseClick(...) to:

 int x, y; public void mouseClicked(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } 

Override paint(...) :

 @Override public void paint(Graphics g) { drawCircle(x, y); } 
+10
source

When you call repaint() , the component is painted again from scratch. You circle is destroyed. You will want to override paintComponent(Graphics) , which is called every time a component is painted.

+5
source

Source: https://habr.com/ru/post/901100/


All Articles