[英]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.