我正在开发一个需要在标签图标上绘画的工具。到目前为止,效果还不错,但是如果我更改画笔的颜色,则所有已经绘制的线条也会更改颜色。
这是我重写的paintComponent方法:
$("#tag_field").on('keyup',function(e){
if (e.keyCode == 13) {
var loc = window.location + '/filter/';
var div = $('.paginated-post').html();
// showSpinner('.listing-items');
//console.log( $('#FilterForm_FilterForm_category').val() + " " + $('#FilterForm_FilterForm_trail').val() );
$.ajax({
type: "POST",
url: loc,
data: {
TAG: $('#tag_field').val(),
//cost: $('#FilterForm_FilterForm_cost').val(),
// OtherID: $('#FilterForm_FilterForm_trail').val()
},
success: function(html){
$('.paginated-post').html(div)
}
});
}
});
以下是更改笔刷颜色的方法:
@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);
}
答案 0 :(得分:0)
好吧,您误解了JLabel
或相应的Graphics
对象中绘图的工作原理。
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>()
”)