在JLabel上绘画 - 改变画笔颜色

问题描述 投票:0回答:1

我正在研究一种需要在标签图标上绘画的工具。到目前为止工作正常,但如果我改变画笔的颜色,所有已画过的线条也会改变颜色。

这是我重写的paintComponent方法:

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(brushColor);
        g2.setStroke(brush);
        for (int i = 1; i < point.size(); i++) {
            g2.draw(new Line2D.Float(point.get(i), point.get(i)));
        }
    }

以下是更改笔刷颜色的方法:

    public void changeBrushColor(int red, int green, int blue) {
        this.brushRed = red;
        this.brushGreen = green;
        this.brushBlue = blue;

        brushColor = new Color(red, green, blue);
        this.brush = new BasicStroke(brushWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
    }

这就是我向点数组添加点数的方法:

        imageLabel.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent event) {
                updateBrush();
                point.add(event.getPoint());
                imageLabel.updatePointList(point);
                repaint();
            }
        });

        imageLabel.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent event) {
                updateBrush();
                point.add(event.getPoint());
                imageLabel.updatePointList(point);
                repaint();
            }
        });
java user-interface paint brush
1个回答
0
投票

好吧,你误解了如何在JLabel或相应的Graphics-object中绘图。

你的JLabel上没有“已经画过”的线条,因为Graphics对象将被删除。 paintComponent()将重新绘制所有线条。

在您的代码中,您可以在绘制之前为所有线条设置颜色。

您需要做的是将线条颜色与点一起存储,并在绘制单条线时更改颜色。

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    for (int i = 1; i < point.size(); i++) {
        g2.setColor(colors.get(i));
        g2.setStroke(brushes.get(i));
        g2.draw(new Line2D.Float(point.get(i).x, point.get(i).y));
    }
}

那么你需要3个列表,一个用于颜色,一个用于刷子,一个用于点。也许您考虑创建一个对这些值进行封装的对象(例如“Linedesc(color, brush, point)”)只包含一个包含它们的列表(“point = new ArrayList<LineDesc>()”)

© www.soinside.com 2019 - 2024. All rights reserved.