【问题标题】:Java Swing Colour Chooser Throwing ErrorJava Swing 颜色选择器抛出错误
【发布时间】:2012-10-24 18:27:27
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java swing colors


    【解决方案1】:

    来自您的代码

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

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

    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);
    }
    

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

    希望这会有所帮助!

    【讨论】:

    • 嗯,你知道我会怎么解决这个问题吗?我不太确定如何更改它。
    • 我将编辑我的答案,向您展示如何解决它......这只是您引用事物的方式。
    • 谢谢!那实际上是我正在使用的教程,但我想我在尝试使其适合我的代码时有点混淆了引用。
    • @Incredidave 不客气。这个特定组件的引用令人困惑......我本能地也会去e.getSource()自己。
    【解决方案2】:

    在您的 stateChanged 方法中,c.getSource() 返回一个 DefaultColorSelectionModel 而不是对您的 JColorChooser 的引用。

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

    Color color = JColorChooser.showDialog(parent, title, initialColor);
    if (color != null) {
      // do something with the chosen color
    }
    

    【讨论】:

    • 它目前仅用作界面的一部分,但弹出对话框可能是一个更好的主意,tbh。
    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多