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

时间:2019-03-27 08:13:29

标签: java user-interface paint brush

我正在开发一个需要在标签图标上绘画的工具。到目前为止,效果还不错,但是如果我更改画笔的颜色,则所有已经绘制的线条也会更改颜色。

这是我重写的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);
    }

1 个答案:

答案 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>()”)