Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel使用鼠标更改颜色以进行绘制_Java_Swing_Jpanel_Awt_Java 2d - Fatal编程技术网

Java JPanel使用鼠标更改颜色以进行绘制

Java JPanel使用鼠标更改颜色以进行绘制,java,swing,jpanel,awt,java-2d,Java,Swing,Jpanel,Awt,Java 2d,我正在尝试使用JPanel在画布上使用鼠标进行绘制。到目前为止一切正常。我会画画。我可以选择任何颜色。然而,我试图使它这样,当我点击一个按钮,它会改变颜色的按钮是附加到任何 比如如果我用黑色画画,然后点击“蓝色”按钮,它会变成蓝色而不是黑色…我不确定我会错在哪里。这是我的paintComponent零件 @Override public void paintComponent(Graphics g) { super.paintComponent(g); button1.addA

我正在尝试使用
JPanel
在画布上使用鼠标进行绘制。到目前为止一切正常。我会画画。我可以选择任何颜色。然而,我试图使它这样,当我点击一个按钮,它会改变颜色的按钮是附加到任何

比如如果我用黑色画画,然后点击“蓝色”按钮,它会变成蓝色而不是黑色…我不确定我会错在哪里。这是我的
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);
}

不,不,不。为什么要将
ActionListener
添加到绘制方法内的按钮?重新绘制管理器可以连续快速调用绘制方法十几次,现在按钮上注册了十几个
ActionListener
s。。他们什么也做不了

首先创建一个可以存储所需油漆颜色的字段。向按钮注册一个
ActionListener
,可能是通过类构造函数,它会更改“绘制颜色”并触发新的绘制周期。调用
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);


}

现在,去阅读,更好地了解绘画在Swing中的实际工作方式

谢谢!这帮了大忙!我确信我明显的NoobJava技能展示了…我能再问一个问题吗?你给出的这个方法非常有效,但是我该如何使已经绘制的东西在新颜色改变时不会改变呢?如果我用蓝色画画,然后换成红色画画,我希望蓝色的画仍然存在。这是一个更大的问题——你有两个基本的选择。您可以记录捕获点时使用的颜色,将其包装在自定义对象中,或者将其绘制到备份缓冲区,如
buffereImage
,然后使用
paintComponent
方法绘制此点。好的,谢谢!我会调查的。再次感谢你的帮助!在源代码中只需要一行空白就可以了。
{
之后或
}
之前的空行通常也是多余的。