Mega Code Archive

 
Categories / Java / Swing JFC
 

Dialog boxes and creating your own components

// : 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);   } } ///:~