所以我正在尝试实现一个颜色选择器,然后将颜色选择并将其传递给另一个要使用的类,但它会引发错误
“线程中的异常”AWT-EventQueue-0“java.lang.ClassCastException: javax.swing.colorchooser.DefaultColorSelectionModel无法强制转换为 javax.swing.JColorChooser中“
每次点击一种颜色。
我正在使用的代码是:
对于实际的JColorChooser
:
JColorChooser RGB = new JColorChooser(Color.GREEN);
RGB.getSelectionModel().addChangeListener(this);
RGB.setAlignmentX(newPolyButton.LEFT_ALIGNMENT);
RGB.setMinimumSize(new Dimension(50, 25));
RGB.setPreferredSize(new Dimension(125, 25));
对于听众:
public void stateChanged(ChangeEvent c) {
JColorChooser RGB = (JColorChooser)c.getSource();
Color poly = RGB.getColor();
imagePanel.setColor(poly);
}
在另一堂课imagePanel
中,我使用:
public void setColor(Color poly) {
ImagePanel.poly = poly;
}
任何人都可以看到我要去哪里吗?我之前使用的是一个带有一些手动输入颜色的组合框可供选择。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
在stateChanged
方法中,c.getSource()
会返回DefaultColorSelectionModel
,而不是JColorChooser
的引用。
但是,JColorChooser
通常用于打开颜色对话框,该对话框在使用Color
按钮关闭时返回OK
。
Color color = JColorChooser.showDialog(parent, title, initialColor);
if (color != null) {
// do something with the chosen color
}
答案 1 :(得分:2)
从您的代码中
RGB.getSelectionModel().addChangeListener(this);
RGB.setAlignmentX(newPolyButton.LEFT_ALIGNMENT);
您正在将ChangeListener添加到RGB实例的Selection Modal中。
javax.swing.JColorChooser.getSelectionModel()
将返回DefaultColorSelectionModel
的实例。
因此,您在通话(JColorChooser)c.getSource();
中收到ClassCastException。
<强>更新强>
来自How to Use Color Choosers Java Tutorial:
tcc.getSelectionModel().addChangeListener(this);
. . .
public void stateChanged(ChangeEvent e) {
Color newColor = tcc.getColor();
banner.setForeground(newColor);
}
当状态发生变化时,您需要将新颜色作为Color Chooser的属性,而不是尝试获取ChangeEvent的Source并进行强制转换。
希望这有帮助!