import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JColorChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; public class Game { public static void main(String[] args) { JFrame frame = new JFrame("The Game of Life"); int sizeConstant = 50; final Grid g = new Grid(5); final GridComponent grid = new GridComponent(g, sizeConstant); final int FRAME_HEIGHT = 700; final int FRAME_WIDTH = 700; frame.add(grid, BorderLayout.CENTER); addMenuBar(frame, g, grid); frame.setBounds(0, 0, FRAME_WIDTH, FRAME_HEIGHT); frame.setVisible(true); frame.setAlwaysOnTop(false); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void addMenuBar(JFrame window, final Grid g, final GridComponent grid) { JMenuBar mainMenu = new JMenuBar(); JMenu file = new JMenu("File"); JMenu reset = new JMenu("Reset"); JMenuItem reset_a = new JMenuItem("All"); JMenuItem reset_c = new JMenuItem("Color"); JMenuItem redefine = new JMenuItem("Redefine"); JMenuItem exit = new JMenuItem("Exit"); JMenu options = new JMenu("Options"); JMenu gridVisible = new JMenu("Show/Hide Grid"); final JMenuItem grid_v = new JMenuItem("Change to Hidden"); JMenu color = new JMenu("Colors"); final JMenuItem color_g = new JMenuItem("Grid"); final JMenuItem color_c = new JMenuItem("Cells"); final JMenuItem color_b = new JMenuItem("Background"); JMenu shape = new JMenu("Cell Shape"); final JMenuItem shape_c = new JMenuItem("Circle"); final JMenuItem shape_r = new JMenuItem("Rectangle"); JMenu filled = new JMenu("Fill"); final JMenuItem shape_f = new JMenuItem("Change to Filled"); class exitListener implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(-1); } } ActionListener listener0 = new exitListener(); exit.addActionListener(listener0); class resetAllListener implements ActionListener { public void actionPerformed(ActionEvent e) { g.reset(Integer.parseInt(JOptionPane.showInputDialog(null, "Enter side dimension:", "Define new grid...", JOptionPane.PLAIN_MESSAGE))); grid.setVisibleGrid(true); grid_v.setText("Change to Hidden"); grid.setGridColor(Color.GRAY); grid.setCellColor(Color.RED); grid.setBackgroundColor(new Color(236, 236, 236)); grid.setCellShape(GridComponent.CIRCLE); grid.setCellsFilled(false); shape_f.setText("Change to Filled"); grid.repaint(); } } ActionListener listener1 = new resetAllListener(); reset_a.addActionListener(listener1); class resetColorListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setVisibleGrid(true); grid_v.setText("Change to Hidden"); grid.setGridColor(Color.GRAY); grid.setCellColor(Color.RED); grid.setBackgroundColor(new Color(236, 236, 236)); grid.setCellsFilled(false); grid.setCellShape(GridComponent.CIRCLE); shape_f.setText("Change to Filled"); grid.repaint(); } } ActionListener listener1a = new resetColorListener(); reset_c.addActionListener(listener1a); class redefineListener implements ActionListener { public void actionPerformed(ActionEvent e) { g.redefine(Integer.parseInt(JOptionPane.showInputDialog( null, "Enter side dimension:", "Redefine grid...", JOptionPane.PLAIN_MESSAGE))); grid.repaint(); } } ActionListener listener1b = new redefineListener(); redefine.addActionListener(listener1b); class gridVisibleListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setVisibleGrid(!grid.getVisibleGrid()); if (grid.getVisibleGrid()) grid_v.setText("Change to Hidden"); else if (!grid.getVisibleGrid()) grid_v.setText("Change to Visible"); grid.repaint(); } } ActionListener listener2 = new gridVisibleListener(); grid_v.addActionListener(listener2); class colorGridListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setGridColor(JColorChooser.showDialog(null, "Pick a Color:", grid.getGridColor())); grid.repaint(); } } ActionListener listener3 = new colorGridListener(); color_g.addActionListener(listener3); class colorCellListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setCellColor(JColorChooser.showDialog(null, "Pick a Color:", grid.getCellColor())); grid.repaint(); } } ActionListener listener4 = new colorCellListener(); color_c.addActionListener(listener4); class colorBgListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setBackgroundColor(JColorChooser.showDialog(null, "Pick a Color:", grid.getCellColor())); grid.repaint(); } } ActionListener listener4a = new colorBgListener(); color_b.addActionListener(listener4a); class cellRectangleListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setCellShape(GridComponent.RECTANGLE); grid.repaint(); } } ActionListener listener5 = new cellRectangleListener(); shape_r.addActionListener(listener5); class cellCircleListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setCellShape(GridComponent.CIRCLE); grid.repaint(); } } ActionListener listener6 = new cellCircleListener(); shape_c.addActionListener(listener6); class filledCellListener implements ActionListener { public void actionPerformed(ActionEvent e) { grid.setCellsFilled(!grid.areCellsFilled()); if (grid.areCellsFilled()) shape_f.setText("Change to Spaced"); else if (!grid.areCellsFilled()) shape_f.setText("Change to Filled"); grid.repaint(); } } ActionListener listener7 = new filledCellListener(); shape_f.addActionListener(listener7); reset.add(reset_c); reset.add(reset_a); file.add(reset); file.add(redefine); file.add(exit); shape.add(shape_r); shape.add(shape_c); filled.add(shape_f); shape.add(filled); color.add(color_g); color.add(color_c); color.add(color_b); gridVisible.add(grid_v); options.add(gridVisible); options.add(color); options.add(shape); mainMenu.add(file); mainMenu.add(options); window.add(mainMenu, BorderLayout.NORTH); } }