Java tutorial
// : c14:TicTacToe.java // Dialog boxes and creating your own components. // <applet code=TicTacToe width=200 height=100></applet> // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.awt.BorderLayout; import java.awt.Container; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class TicTacToe extends JApplet { private JTextField rows = new JTextField("3"), cols = new JTextField("3"); private static final int BLANK = 0, XX = 1, OO = 2; class ToeDialog extends JDialog { private int turn = XX; // Start with x's turn ToeDialog(int cellsWide, int cellsHigh) { setTitle("The game itself"); Container cp = getContentPane(); cp.setLayout(new GridLayout(cellsWide, cellsHigh)); for (int i = 0; i < cellsWide * cellsHigh; i++) cp.add(new ToeButton()); setSize(cellsWide * 50, cellsHigh * 50); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } class ToeButton extends JPanel { private int state = BLANK; public ToeButton() { addMouseListener(new ML()); } public void paintComponent(Graphics g) { super.paintComponent(g); int x1 = 0, y1 = 0, x2 = getSize().width - 1, y2 = getSize().height - 1; g.drawRect(x1, y1, x2, y2); x1 = x2 / 4; y1 = y2 / 4; int wide = x2 / 2, high = y2 / 2; if (state == XX) { g.drawLine(x1, y1, x1 + wide, y1 + high); g.drawLine(x1, y1 + high, x1 + wide, y1); } if (state == OO) g.drawOval(x1, y1, x1 + wide / 2, y1 + high / 2); } class ML extends MouseAdapter { public void mousePressed(MouseEvent e) { if (state == BLANK) { state = turn; turn = (turn == XX ? OO : XX); } else state = (state == XX ? OO : XX); repaint(); } } } } class BL implements ActionListener { public void actionPerformed(ActionEvent e) { JDialog d = new ToeDialog(Integer.parseInt(rows.getText()), Integer.parseInt(cols.getText())); d.setVisible(true); } } public void init() { JPanel p = new JPanel(); p.setLayout(new GridLayout(2, 2)); p.add(new JLabel("Rows", JLabel.CENTER)); p.add(rows); p.add(new JLabel("Columns", JLabel.CENTER)); p.add(cols); Container cp = getContentPane(); cp.add(p, BorderLayout.NORTH); JButton b = new JButton("go"); b.addActionListener(new BL()); cp.add(b, BorderLayout.SOUTH); } public static void main(String[] args) { run(new TicTacToe(), 200, 100); } public static void run(JApplet applet, int width, int height) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(width, height); applet.init(); applet.start(); frame.setVisible(true); } } ///:~