Java 7 for Absolute Beginners

(nextflipdebug5) #1
CHAPTER 7 ■ WRITING A USER INTERFACE

the game is over (because the player won or lost) or the game should continue. If the user clicked any
other button (most likely the right button), this method still calls the resolveClick method, but with the
button flag indicating that a button other than the left button was clicked. The resolveClick method
then toggles the mine, suspect, and unknown icons on that location. Finally, the mouseClicked method
uses the value returned by the resolveClick method to end the game (the player won or lost) or
continue the game. If the game didn't end, we update the buttons in the minefield. Finally, once all the
other processing has been done, the mouseClicked method updates the labels.
The MineSweeperMouseListener class isn't complex, but it is worth moving this functionality into its
own class, to simplify the MineSweeper class. It also follows the design principle that each object should
have a clear purpose. In this case, we create a class with the clear mission of listening for clicks in the
minefield, and removing that functionality (and moving other bits to other classes) lets the MineSweeper
focus purely on showing the user interface.
Let's finish up this long journey through the MineSweeper game by looking at the last class in the
MineSweeper package. Listing 7-29 shows the MineSweeperActionListener class.


Listing 7-29. The MineSweeperActionListener class


package com.apress.java7forabsolutebeginners.examples.MineSweeper;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class MineSweeperActionListener implements ActionListener {


private MineSweeper mineSweeper;
private MineSweeperHelper mineSweeperHelper;


public MineSweeperActionListener(MineSweeper mineSweeper, MineSweeperHelper helper) {
this.mineSweeper = mineSweeper;
mineSweeperHelper = helper;
}


@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Exit")) {
System.exit(0);
}
if (e.getActionCommand().equals("New Game")) {
mineSweeperHelper.newGame(mineSweeper.rows, mineSweeper.columns);
return;
}
if (e.getActionCommand().equals("Small (8 x 8, 10 mines)")) {
int previousRows = mineSweeper.rows;
int previousColumns = mineSweeper.columns;
mineSweeper.rows = 8;
mineSweeper.columns = 8;
mineSweeper.numberOfMines = 10;
mineSweeperHelper.newGame(previousRows, previousColumns);
return;
}

Free download pdf