我有一个 Java 绘画程序,它使用自定义 JPanel 进行绘画。虽然当单击 JPanel 时会绘制一个小椭圆形(或圆形,如果您愿意的话),但每次单击另一个位置时,椭圆形都会消失。坐标也会更新,但椭圆形不会停留,它会移动到用户下一步单击的位置...... 以下是自定义 JPanel 的代码:
int xCord, yCord;
public class PaintPanel extends JPanel implements MouseListener {
// default serial whatever...
private static final long serialVersionUID = -6514297510194472060L;
// initial values
int xCord = -10;
int yCord = -10;
public PaintPanel() {
addMouseListener(this);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(ProgramUI.currentColor);
g.fillOval(xCord, yCord, 8, 8);
repaint();
}
@Override
public void mouseClicked(MouseEvent m) {
}
@Override
public void mouseEntered(MouseEvent m) {
}
@Override
public void mouseExited(MouseEvent m) {
}
@Override
public void mousePressed(MouseEvent m) {
if (paintPanel.contains(m.getPoint())) {
xCord = m.getX();
yCord = m.getY();
System.out.println("x: " + xCord + " y: " + yCord);
}
}
@Override
public void mouseReleased(MouseEvent m) {
}
}
我需要按住鼠标来连续绘制椭圆形,直到松开鼠标按钮。这里唯一的问题是鼠标椭圆会更新,但不会保存其原始位置。我该如何解决?
最佳答案
仅绘制一个椭圆形,因为只有一个 fillOval
在 paintComponent
中绘制单个椭圆形的语句方法so语句
super.paintComponent(g);
导致任何先前的绘画被清除一次 repaint
被调用。
要绘制多个椭圆,您可以绘制 List<Point>
中的组件。如 Custom Painting Approaches 中所述
请勿调用repaint
从内部paintComponent
。这会产生无限循环并降低性能。如果需要定期更新,请调用repaint
来自ActionListener
的Swing Timer相反。
关于java - 为什么这个 Java 绘图程序不能绘制多个椭圆形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904768/