0

ちょっとしたコンテキスト - 私は 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();
        }
      }
    });
}
4

1 に答える 1