I have this action listener:
this.newGameButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
MokkiGUI.this.game = newGameQuery();
MokkiGUI.this.AI = new AIPlayer(MokkiGUI.this.game.getBoard());
MokkiGUI.this.boardLabel.setText("");
MokkiGUI.this.boardLabel.repaint();
refreshScreen();
JOptionPane.showMessageDialog(null, "Starting new game", "New game", JOptionPane.PLAIN_MESSAGE);
if (MokkiGUI.this.game.getAIIndicator() % 2 == 1) {
while (makeAIMove()) {
MokkiGUI.this.refreshScreen();
}
MokkiGUI.this.refreshScreen();
}
}
});
public void refreshScreen() {
if (javax.swing.SwingUtilities.isEventDispatchThread()) {
System.out.println("Is");
} else {
System.out.println("Not");
}
MokkiGUI.this.boardLabel.setText(MokkiTest.printBoard(MokkiGUI.this.game.getBoard()));
MokkiGUI.this.boardLabel.repaint();
MokkiGUI.this.data.setText("X: " + MokkiGUI.this.game.getPlayer1name() + "\n Score: "
+ MokkiGUI.this.game.getPlayer1score() + "\n\n" + "O: " + MokkiGUI.this.game.getPlayer2name() + "\n Score: "
+ MokkiGUI.this.game.getPlayer2score());
MokkiGUI.this.data.repaint();
if (!MokkiGUI.this.game.redoable()) {
MokkiGUI.this.forwardButton.setEnabled(false);
MokkiGUI.this.allForwardButton.setEnabled(false);
} else {
MokkiGUI.this.forwardButton.setEnabled(true);
MokkiGUI.this.allForwardButton.setEnabled(true);
}
if (!MokkiGUI.this.game.undoable()) {
MokkiGUI.this.backButton.setEnabled(false);
MokkiGUI.this.allBackButton.setEnabled(false);
} else {
MokkiGUI.this.backButton.setEnabled(true);
MokkiGUI.this.allBackButton.setEnabled(true);
}
MokkiGUI.this.buttonPanel.repaint();
}
The refreshScreen()s don't seem to work. They are apprently running on the Event Dispatcher thread and the changes made only show up when the action listener's execution is over. It works fine when called from the MokkiGUI() constructor, as it is not on the EDT.