Java Swing Color Chooser投掷错误

时间:2012-10-24 18:27:27

标签: java swing colors

所以我正在尝试实现一个颜色选择器,然后将颜色选择并将其传递给另一个要使用的类,但它会引发错误

  

“线程中的异常”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;
}

任何人都可以看到我要去哪里吗?我之前使用的是一个带有一些手动输入颜色的组合框可供选择。

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

2 个答案:

答案 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并进行强制转换。

希望这有帮助!