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