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()返します。DefaultColorSelectionModelJColorChooser

ただし、通常は、ボタンを使用して閉じJColorChooserたときに を返すカラー ダイアログを開くために使用されます。ColorOK

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

RGB インスタンスの Selection Modal に ChangeListener を追加しています。

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 を取得してキャストするのではなく、Color Chooser のプロパティとして新しい色を取得する必要があります。

お役に立てれば!

于 2012-10-24T18:38:06.087 に答える