簡體   English   中英

在JLabel上繪畫 - 改變畫筆顏色

[英]Painting on JLabel - change brush color

我正在研究一種需要在標簽圖標上繪畫的工具。 到目前為止工作正常,但如果我改變畫筆的顏色,所有已畫過的線條也會改變顏色。

這是我重寫的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();
            }
        });

好吧,你誤解了JLabel繪圖或相應的Graphics -object是如何工作的。

JLabel上沒有“已繪制”的行,因為Graphics -object將被刪除。 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>() ”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM