简单的Java绘图程序:如何在不更改先前绘制的情况下更改颜色

时间:2014-01-03 15:58:54

标签: java swing colors paintcomponent mousemotionevent

我正在编写简单的Paint程序,您可以通过拖动鼠标来绘制所需的任何内容。您可以更改画笔的颜色和大小,但在此版本中,当我更改画笔的颜色或大小时,当我开始通过拖动鼠标再次绘制时,之前绘制的所有内容也会更改。我在paintComponent方法中尝试过getGraphics方法,但我可能做错了方法,因为它对我没有帮助..任何想法如何处理这个问题?谢谢。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;

public class PaintPanel extends JPanel{
    private int pointCount = 0;
    private Point points[] = new Point[10000];
    private Color currentColor;
    private int pointSize;

    public PaintPanel(){
        setBackground(Color.WHITE);
        setDefaultColor();
        setDefaultPointSize();
        addMouseMotionListener(
                new MouseMotionAdapter() {

                    public void mouseDragged(MouseEvent event){

                        if(pointCount < points.length){
                            points[pointCount] = event.getPoint();
                            pointCount++;
                            repaint();
                        }
                    }
        }
      );

    }

    public void setColor(Color newColor){
        currentColor = newColor;
    }

    public void setDefaultColor(){
        currentColor = Color.BLACK;
    }

    public void setPointSize(int size){
        pointSize = size;
    }

    public void setDefaultPointSize(){
        pointSize = 6;
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(currentColor);
        for(int i = 0; i < pointCount; i++)
            g.fillOval(points[i].x,points[i].y,pointSize,pointSize);
    }
}

没有收藏品的任何选项吗?

1 个答案:

答案 0 :(得分:2)

一切都是彩色的currentColor您需要两个级别的存储空间。首先,使用ArrayList存储您的积分。然后使用数组列表的数组列表来存储“曲线”。每条“曲线”应该知道它的颜色。