一点上下文 - 我正在创建 Scrabble 的基本实现,并且 GUI 依赖于 Java Swing 和 AWT。下面的代码摘录包含 Cell 类的构造函数(Scrabble 板上的各个空间)。我处于概念验证阶段,正在测试将硬编码字母图标添加和删除到单个单元格。每个单元格都是一个带有 JLabel 的单独的 JPanel(其中包含字母的 ImageIcon)。代码看起来好像没有错误,但是每 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();
}
}
});
}