单击新位置时如何阻止形状消失?
How to stop the shape from disappearing when you click on new location?
我已经编写了通过单击鼠标显示形状的代码,但我遇到了问题。当我点击新位置时,形状在前一个位置消失。我怎样才能阻止这种情况发生?
第一个Class:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MouseClick {
private static int x,y;
private static DrawingObjects object = new DrawingObjects();
public static void main(String[] args){
JFrame frame = new JFrame("MouseClick");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.add(object);
object.addMouseListener(new AL());
}
static class AL extends MouseAdapter{
public void mouseClicked (MouseEvent e){
x = e.getX();
y = e.getY();
object.drawing(x, y);
}
}
}
第二个Class:
import javax.swing.*;
import java.awt.*;
public class DrawingObjects extends JPanel{
private static int x,y;
public void drawing(int xx, int yy){
x = xx;
y = yy;
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x, y, 20, 20);
}
}
处理这个问题的最好方法是跟踪每个被点击的点,并在 paintComponent
中重新绘制每个点。
所以将 private static int x, y
更改为 private List<Point> points = new ArrayList<>()
,然后添加:
public void drawing(int x, int y){
points.add(new Point(x, y));
repaint();
}
然后重绘时遍历每个点:
public void paintComponent(Graphics g){
super.paintComponent(g);
for(Point p : points){
g.fillRect(p.x, p.y, 20, 20);
}
}
我已经编写了通过单击鼠标显示形状的代码,但我遇到了问题。当我点击新位置时,形状在前一个位置消失。我怎样才能阻止这种情况发生?
第一个Class:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MouseClick {
private static int x,y;
private static DrawingObjects object = new DrawingObjects();
public static void main(String[] args){
JFrame frame = new JFrame("MouseClick");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.add(object);
object.addMouseListener(new AL());
}
static class AL extends MouseAdapter{
public void mouseClicked (MouseEvent e){
x = e.getX();
y = e.getY();
object.drawing(x, y);
}
}
}
第二个Class:
import javax.swing.*;
import java.awt.*;
public class DrawingObjects extends JPanel{
private static int x,y;
public void drawing(int xx, int yy){
x = xx;
y = yy;
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x, y, 20, 20);
}
}
处理这个问题的最好方法是跟踪每个被点击的点,并在 paintComponent
中重新绘制每个点。
所以将 private static int x, y
更改为 private List<Point> points = new ArrayList<>()
,然后添加:
public void drawing(int x, int y){
points.add(new Point(x, y));
repaint();
}
然后重绘时遍历每个点:
public void paintComponent(Graphics g){
super.paintComponent(g);
for(Point p : points){
g.fillRect(p.x, p.y, 20, 20);
}
}