【发布时间】:2016-07-15 11:47:27
【问题描述】:
我正在使用 Java 开发一个简单的绘图应用程序,当我选择一种颜色时,按钮背景会完美改变,但返回的颜色始终是前一个颜色。
例如,如果我选择黑色然后蓝色,它将绘制为黑色。如果我在蓝色之后选择另一种颜色,它将绘制为蓝色。
public class ColorChooserBtn extends JButton {
private Color color;
public ColorChooserBtn() {
super();
this.setBackground(Color.BLACK);
this.setPreferredSize(new Dimension(16, 16));
this.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Color c = JColorChooser.showDialog(null, "Choose a Color", color);
if (c != null){
setSelectedColor(c);
setBackground(color);
}
}
});
}
public Color getSelectedColor() {
return color;
}
public void setSelectedColor(Color newColor) {
color = newColor;
}
}
public class Paint {
DrawArea drawArea;
JButton clearBtn;
ColorChooserBtn colorBtn;
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == clearBtn){
drawArea.clear();
} else if(e.getSource() == colorBtn){
drawArea.coloring(colorBtn.getSelectedColor());
}
}
};
public Paint() {
JFrame frame = new JFrame("Paint");
frame.getContentPane().setLayout(new BorderLayout());
drawArea = new DrawArea();
frame.getContentPane().add(drawArea, BorderLayout.CENTER);
JPanel controls = new JPanel();
clearBtn = new JButton("Clear");
clearBtn.addActionListener(actionListener);
colorBtn = new ColorChooserBtn();
colorBtn.addActionListener(actionListener);
controls.add(clearBtn);
controls.add(colorBtn);
frame.getContentPane().add(controls,BorderLayout.NORTH);
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Paint();
}
}
【问题讨论】:
-
可能是线程问题?使您的颜色变量
volatile并重试。不确定,它有效... -
我试过了,还是一样的问题。
-
那么您还必须在代码中显示您使用颜色变量进行绘画的位置。显示的代码似乎没问题。
-
什么是 DrawArea?它是如何工作的?
-
添加一些 System.out.println 语句来跟踪你的动作监听器被触发的顺序
标签: java jcolorchooser