/** * PopItModel-klassen */ public class PopItModel { public static final int RADER = 6; public static final int KOLONNER = 6; private boolean[][] radene = new boolean[RADER][KOLONNER]; public boolean hentTrykket(int rad, int kolonne) { return radene[rad][kolonne]; } public void toggle(int rad, int kolonne) { radene[rad][kolonne] = !radene[rad][kolonne]; } } /** * PopItView-klassen */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PopItView { private PopItController controller; private int rader; private int kolonner; private JFrame vindu; private JPanel panel; private JButton[][] knappene; public PopItView(PopItController controller, int rader, int kolonner) { this.controller = controller; this.rader = rader; this.kolonner = kolonner; try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.exit(-1); } opprettVindu(); opprettPanel(); opprettKnapper(); } private void opprettVindu() { vindu = new JFrame("Pop It"); vindu.setSize(600, 600); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void opprettPanel() { panel = new JPanel(); panel.setLayout(new GridLayout(rader, kolonner)); vindu.add(panel, BorderLayout.CENTER); } private class Knappetrykk implements ActionListener { private int rad; private int kolonne; public Knappetrykk(int rad, int kolonne) { this.rad = rad; this.kolonne = kolonne; } @Override public void actionPerformed(ActionEvent e) { controller.oppdaterKnapp(rad, kolonne); } } private void opprettKnapper() { knappene = new JButton[rader][kolonner]; for (int rad = 0; rad < rader; rad ++) { for (int kolonne = 0; kolonne < kolonner; kolonne ++) { JButton knapp = new JButton(); knapp.setBackground(Color.WHITE); knapp.addActionListener(new Knappetrykk(rad, kolonne)); panel.add(knapp); knappene[rad][kolonne] = knapp; } } } public void endreFarge(int rad, int kolonne, boolean trykket) { if (trykket) { knappene[rad][kolonne].setBackground(Color.BLACK); } else { knappene[rad][kolonne].setBackground(Color.WHITE); } } public void vis() { vindu.setVisible(true); } } /** * PopItController-klassen */ public class PopItController { private PopItModel model; private PopItView view; public PopItController() { model = new PopItModel(); view = new PopItView(this, PopItModel.RADER, PopItModel.KOLONNER); view.vis(); } public void oppdaterKnapp(int rad, int kolonne) { model.toggle(rad, kolonne); boolean trykket = model.hentTrykket(rad, kolonne); view.endreFarge(rad, kolonne, trykket); } } /** * Hovedprogrammet */ public class Hoved { public static void main(String[] args) { new PopItController(); } }