JPanel改变颜色以用鼠标绘制

时间:2017-10-26 05:27:10

标签: java swing jpanel awt java-2d

我正在尝试使用鼠标在画布上绘制JPanel。到目前为止一切正常。我能画。我可以将颜色设置为我选择的颜色。但是我试图这样做,以便当我单击一个按钮时,它会将颜色更改为按钮所附加的颜色。

如果我用黑色绘画,那就点击" Blue"按钮,它变为蓝色而不是黑色...我不确定我在哪里出错了。继承我的paintComponent部分。

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);

    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1)
                g.setColor(Color.BLUE);
        }
    });

    for (Point point : points)
        g.fillOval(point.x, point.y, 4 , 4);
}

1 个答案:

答案 0 :(得分:2)

不,不,不。为什么要在paint方法中的按钮中添加ActionListener?重绘经理可以快速连续调用绘画方法十几次,现在你已经在按钮上注册了十几个ActionListener ..这些都没有做任何事情。

首先创建一个可以存储所需油漆颜色的字段。注册ActionListener到你的按钮,可能是通过类构造函数,它改变了#34;绘制颜色"并触发新的油漆循环。调用paintComponent时,应用所需的颜色

private Color paintColor = Color.BLACK;

protected void setupActionListener() {
    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1) {
                paintColor = Color.BLUE;
                repaint();
            }
        }
    });    
}

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.setColor(paintColor);
    for (Point point : points)
        g.fillOval(point.x, point.y, 4 , 4);


}

现在,请阅读Performing Custom PaintingPainting in AWT and Swing,以便更好地了解绘画在Swing中的实际效果