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
方法绘制此点。好的,谢谢!我会调查的。再次感谢你的帮助!在源代码中只需要一行空白就可以了。{
之后或}
之前的空行通常也是多余的。