import java.awt.*; import java.awt.event.*; import javax.swing.*; public class View { private Controller controller; private int antRader, antKolonner; private JFrame vindu; private JPanel hovedPanel, infoPanel, rutePanel; private JLabel tittel; private JButton spillKnapp; private JButton[][] celleKnapper; public View(Controller controller, int antRader, int antKolonner) { this.controller = controller; this.antRader = antRader; this.antKolonner = antKolonner; vindu = new JFrame("Game of life"); hovedPanel = new JPanel(new BorderLayout(10, 10)); infoPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10)); rutePanel = new JPanel(new GridLayout(antRader, antKolonner)); tittel = new JLabel("GAME OF LIFE"); tittel.setFont(new Font("SansSerif", Font.PLAIN, 40)); spillKnapp = new JButton("Start"); celleKnapper = new JButton[antRader][antKolonner]; } public void init() { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName() ); } catch (Exception e) { System.exit(1); } vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); vindu.setPreferredSize(new Dimension(800, 1000)); infoPanel.add(tittel); // Kortform for å opprette implementasjon av actionlistener spillKnapp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { controller.spill(); } }); infoPanel.add(spillKnapp); // Oppretter alle celleknapper for (int i = 0; i < antRader; i++) { for (int j = 0; j < antKolonner; j++) { JButton knapp = new JButton(); knapp.addActionListener(new StatusVeksler(i, j)); celleKnapper[i][j] = knapp; rutePanel.add(knapp); } } controller.oppdaterCelleKnapper(); hovedPanel.add(infoPanel, BorderLayout.NORTH); hovedPanel.add(rutePanel, BorderLayout.CENTER); vindu.add(hovedPanel); vindu.pack(); vindu.setLocationRelativeTo(null); vindu.setVisible(true); } // Endrer tekst til en gitt knapp public void byttCelleKnappStatus(int rad, int kol, char tegn) { celleKnapper[rad][kol].setText(tegn + ""); } // Metode for å endre tittel public void settTittel(String tekst) { tittel.setText(tekst); } public void settSpillKnappTekst(String tekst) { spillKnapp.setText(tekst); } private class StatusVeksler implements ActionListener { private int rad, kol; public StatusVeksler(int r, int k) { rad = r; kol = k; } @Override public void actionPerformed(ActionEvent e) { controller.byttCelleStatus(rad, kol); } } }