/**
* 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(); }
}