ちょっとしたコンテキスト - 私は Scrabble の初歩的な実装を作成しており、GUI は Java Swing と AWT に依存しています。以下のコードの抜粋には、Cell クラス (Scrabble ボードの個々のスペース) のコンストラクターが含まれています。私は概念実証段階にあり、個々のセルへのハードコードされた文字アイコンの追加と削除をテストしています。各セルは、JLabel (文字の ImageIcon を含む) を持つ個別の JPanel です。コードはエラーなく動作するように見えますが、(マウス クリックによる) 5 ~ 6 回の追加/削除ごとにクラス キャスト例外が発生します。特定の例外は次のとおりです。
スレッド「AWT-EventQueue-0」の例外 java.lang.ClassCastException: セルを javax.swing.JLabel にキャストできません
この例外がどこで発生するかはわかりませんが、より具体的には、追加と削除が複数回成功した後にのみ発生する理由です。どんな洞察も大歓迎です。私は Java GUI の初心者です。
public class Cell extends JPanel {
/*Tile Colors*/
public static Color twColor = new Color(255, 0, 0);
public static Color dwColor = new Color(255, 153, 255);
public static Color tlColor = new Color(0, 51, 255);
public static Color dlColor = new Color(102, 204, 255);
public static Color defaultColor = new Color(255, 255, 255);
private JLabel selected = null;
private JLabel clicked = null;
private JLabel letterIcon;
private ImageIcon defaultIcon;
private ImageIcon testImg;
public Cell(int xPos, int yPos, int premiumStatus) {
defaultIcon = new ImageIcon ("img/transparent.png");
testImg = new ImageIcon ("img/test.jpg"); // Letter image hard-coded for testing
letterIcon = new JLabel("", defaultIcon, JLabel.CENTER);
add(letterIcon);
letterIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JLabel clicked = (JLabel) getComponentAt(e.getPoint());
System.out.println(clicked);
if (clicked == null) {
return;
}
if (selected != null) {
selected.removeAll();
selected.revalidate();
selected.setIcon(defaultIcon);
selected.repaint();
System.out.println("Test");
selected = null;
return;
}
if (selected == null) {
selected = clicked;
selected.setIcon(testImg);
selected.revalidate();
selected.repaint();
}
}
});
}