2

因此,我正在尝试实现一个颜色选择器,然后该颜色选择器将采用该颜色并将其传递给另一个要使用的类,但它抛出了错误

“线程“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;
}

谁能看到我要去哪里?我以前使用组合框,其中包含一些手动输入的颜色可供选择。

非常感谢任何帮助,谢谢!

4

2 回答 2

2

在您的stateChanged方法中,c.getSource()返回 aDefaultColorSelectionModel而不是对您的JColorChooser.

但是,JColorChooser通常用于打开一个颜色对话框,该对话框在使用按钮Color关闭时返回一个。OK

Color color = JColorChooser.showDialog(parent, title, initialColor);
if (color != null) {
  // do something with the chosen color
}
于 2012-10-24T18:33:21.467 回答
2

从你的代码

RGB.getSelectionModel().addChangeListener(this);
RGB.setAlignmentX(newPolyButton.LEFT_ALIGNMENT);

您正在将 ChangeListener 添加到 RGB 实例的选择模式中。

javax.swing.JColorChooser.getSelectionModel()将返回DefaultColorSelectionModel.

因此,您会在 call 中获得 ClassCastException (JColorChooser)c.getSource();

更新

如何使用颜色选择器 Java 教程

tcc.getSelectionModel().addChangeListener(this);
. . .
public void stateChanged(ChangeEvent e) {
    Color newColor = tcc.getColor();
    banner.setForeground(newColor);
}

当状态发生变化时,您将希望获取新颜色作为颜色选择器的属性,而不是尝试获取 ChangeEvent 的 Source 并进行转换。

希望这可以帮助!

于 2012-10-24T18:38:06.087 回答