import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.Border; class Knapperi { public static void main(String[] args) { JFrame vindu = new JFrame(); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); KnappeGrid knappegrid = new KnappeGrid(5,5); knappegrid.initGUI(); vindu.add(knappegrid); vindu.setMinimumSize(new Dimension(500,500)); vindu.pack(); vindu.setVisible(true); } static class KnappeGrid extends JPanel { GridLayout layout; int rad,kol; Knapp[][] knapper; Knapp borderKnapp = null; Border knappBor; KnappeGrid(int r, int k){ this.rad = r; this.kol = k; layout = new GridLayout(rad,kol); knapper = new Knapp[rad][kol]; } void initGUI(){ this.setLayout(layout); for (int i = 0; i < rad; i++) { for (int j = 0; j < kol; j++) { Knapp knapp = new Knapp("Knapp"); this.add(knapp); knapper[i][j] = knapp; // Alle mulige koordinater for naboer int[][] koord = new int[4][2]; koord[0][0] = i + 1; koord[0][1] = j; koord[1][0] = i - 1; koord[1][1] = j; koord[2][0] = i; koord[2][1] = j + 1; koord[3][0] = i; koord[3][1] = j - 1; knapp.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // Gå gjennom nabo array for (int l = 0; l < koord.length; l++) { // Sjekke utenfor array if (!(koord[l][1] < 0 || koord[l][0] < 0 || koord[l][0] >= rad || koord[l][1] >= kol)) { // Hente ut fra arrayet knapper[koord[l][0]][koord[l][1]].farg(); } } // Sette border if (borderKnapp != null){ borderKnapp.setBorder(knappBor); } borderKnapp = knapp; knappBor = borderKnapp.getBorder(); knapp.setBorder(BorderFactory.createLineBorder(Color.RED)); } }); } } } class Knapp extends JButton { int farge = 0; Knapp(String text){ super(text); } void farg(){ // Mulig farge ikke funker på mac // Prøv med setOpaque(true); if (farge == 0) { // setForeground(Color.RED); setBackground(Color.RED); // setOpaque(true); farge++; } else if (farge == 1){ // setForeground(Color.BLUE); setBackground(Color.BLUE); // setOpaque(true); farge++; } else { // setForeground(Color.BLACK); setBackground(Color.WHITE); // setOpaque(false); farge = 0; } } } } }