【发布时间】:2015-06-19 08:52:17
【问题描述】:
我目前正在用 Java 制作“Super Tic-Tac-Toe”应用程序。这是我的目标的描述。 http://mathwithbaddrawings.com/ultimate-tic-tac-toe-original-post。但是我在点击更新 Jframe 时遇到问题。我的应用程序由组成井字游戏板 (JPanels) 的单个单元格 (JLabels) 组成,这些单元格将驻留在 JFrame 中。
我的问题是在 MouseClick 上使用 getSource 只会让我像我的 JPanel 一样渗入,并且我无法访问井字游戏网格的哪个单元格被按下。有没有办法用我目前的组织这个项目的方法检查哪一个被按下?
这是我的代码,用于查看包含侦听器的 ticTacToe Board:
public class TicTacToeView extends JPanel {
public CellView[][] cv;
public TicTacToe ttt;
public TicTacToeView(TicTacToe t) {
int rows = 3;
int columns = 3;
cv = new CellView[3][3];
ttt = t;
setSize(3 * 64, 3 * 64);
setBackground(Color.white);
setLayout(new GridLayout(rows, columns));
setVisible(true);
setFocusable(true);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j ++) {
System.out.println(ttt.getCellAt(i, j).toString());
cv[i][j] = new CellView(ttt.getCellAt(i, j));
cv[i][j].addMouseListener(new yourListener());
add(cv[i][j]);
}
}
setVisible(true);
}
public String toString() {
return ttt.toString();
}
public class yourListener extends MouseAdapter{
public void mouseClicked(MouseEvent e){
CellView labelReference=(CellView)e.getSource();
Cell cellClicked = labelReference.getCell();
System.out.println(cellClicked.getCol() +"," + cellClicked.getRow());
cellClicked.setState(CellState.O);
ttt.setCellAt(cellClicked.getCol(), cellClicked.getRow(), CellState.O);
System.out.println(ttt.toString());
}
}
}
现在当 i System.out 它按预期将正确的单元格更改为 O 时。但我不知道如何从这里更新框架,因为 gameFrame 就是由这个组成的。
【问题讨论】:
-
请贴一些代码。
-
答案将取决于您将
MouseListener附加到什么,从它的声音来看,它们应该单独附加到标签上 -
@NabeelOmer 那个代码好还是我应该包含包含 JLabel 和 JFrame 的代码?
-
我想这会很好......
-
@MadProgrammer 我将代码添加到包含侦听器的 OP 中。我可以很好地更改 Board 的状态,但我不知道如何更改顶级图形。
标签: java swing jframe mouselistener