java - 为什么这个 Java 绘图程序不能绘制多个椭圆形?

标签 java swing repaint paintcomponent

我有一个 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) {
        }

    }

我需要按住鼠标来连续绘制椭圆形,直到松开鼠标按钮。这里唯一的问题是鼠标椭圆会更新,但不会保存其原始位置。我该如何解决?

最佳答案

仅绘制一个椭圆形,因为只有一个 fillOvalpaintComponent 中绘制单个椭圆形的语句方法so语句

super.paintComponent(g);

导致任何先前的绘画被清除一次 repaint被调用。

要绘制多个椭圆,您可以绘制 List<Point> 中的组件。如 Custom Painting Approaches 中所述

请勿调用repaint从内部paintComponent 。这会产生无限循环并降低性能。如果需要定期更新,请调用repaint来自ActionListenerSwing Timer相反。

关于java - 为什么这个 Java 绘图程序不能绘制多个椭圆形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904768/

相关文章:

java - hibernate 5 : sessionFactory is null

java - Gson 反序列化为 List<Object>,其中列表的通用类型作为类名给出

java - 如何正确着色JTree和所有节点

Java repaint() 不调用 paintComponent

java - 重新绘制图形问题

java - 无法移除组件并重新绘制

java - Jedis(Redis)减速

java - String(日期)转int(日)+int(月)+int(年)转LocalDate

java - 拖放 JPanel 不会掉落

Java:无法转换为自定义类