college/ss2010/gdi2/java/libs/acm/demo/TicTacToe.java
2013-12-19 19:05:28 +01:00

84 lines
2.3 KiB
Java

/*
* File: TicTacToe.java
* --------------------
* This application uses TableLayout to create a 3x3 array
* of JButtons. Clicking on an empty button changes its label
* to an X or an O, as appropriate.
*/
import acm.gui.*;
import acm.program.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TicTacToe extends Program implements ItemListener {
/** Set the program dimensions */
public static final int APPLICATION_WIDTH = 225;
public static final int APPLICATION_HEIGHT = 225;
/** Font to use for the buttons */
public static final Font BUTTON_FONT = new Font("SansSerif", Font.BOLD, 36);
/** Initialize the application */
public void init() {
weightCheckBox = new JCheckBox("Use weights");
add(weightCheckBox, SOUTH);
weightCheckBox.addItemListener(this);
setLayout(new TableLayout(3, 3));
for (int i = 0; i < 9; i++) {
JButton button = new JButton("");
button.setFont(BUTTON_FONT);
add(button, "width=60 height=60");
}
turn = 'X';
addActionListeners();
}
/** Sets whether the buttons use weights or constant widths */
public void setWeightFlag(boolean flag) {
String constraints = "fill=BOTH";
if (flag) {
constraints += " weighty=1 weightx=1";
} else {
constraints += " width=60 height=60";
}
TableLayout layout = (TableLayout) getLayout();
Container centerPanel = getRegionPanel(CENTER);
int nc = centerPanel.getComponentCount();
for (int i = 0; i < nc; i++) {
Component comp = centerPanel.getComponent(i);
layout.setConstraints(comp, constraints);
}
validate();
}
/** Respond to action events by changing the button label */
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if (button.getText().equals("")) {
switch (turn) {
case 'X': button.setText("X"); turn = 'O'; break;
case 'O': button.setText("O"); turn = 'X'; break;
}
}
}
/** Respond to item events by resetting the constraint options */
public void itemStateChanged(ItemEvent e) {
JCheckBox checkBox = (JCheckBox) e.getSource();
setWeightFlag(checkBox.isSelected());
}
/* Private instance variables */
private char turn;
private JCheckBox weightCheckBox;
/* Standard Java entry point */
/* This method can be eliminated in most Java environments */
public static void main(String[] args) {
new TicTacToe().start(args);
}
}