import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.*; import javax.swing.*; import java.util.Timer; public class GUI { JFrame vindu; // vinduet JPanel panel; JButton[][] kortknapper; Kontroller kontroller; int teller = 0; // holder rede p? hvor mange kort vi har snudd Timer timer = new Timer(); public GUI(Kontroller kontroller) { try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.exit(1); // avslutter programmet hvis det ikke g?r } this.kontroller = kontroller; this.kortknapper = new JButton[kontroller.hentRader()][kontroller.hentKolonner()]; vindu = new JFrame("A Game Of Flashcards"); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // avslutter n?r vi krysser ut vinduet vindu.setLayout(new BorderLayout()); this.leggTilKnapper(); vindu.setSize(800, 600); vindu.setLocationRelativeTo(null); // gj?r at vinduet dukker opp i midten av skjermen din vindu.setVisible(true); } protected class Kortknapp extends JButton { private Kort kort; public Kortknapp(Kort kort) { super(""); this.kort = kort; super.addActionListener(new Kortbehandler()); } private class Kortbehandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // gir knappen en handling if (!kort.erSnudd() && teller < 2) { kontroller.snuKort(kort); // informerer kontroller, som igjen informerer modellen teller++; if (teller == 1) { kontroller.settSiste(kort); } else if (teller == 2 && !kort.hentPartner().erSnudd()) { Oppgave oppgave = new Oppgave(kontroller, kort); timer.schedule(oppgave, 1000); // vi lager en tr?doppgave og sender den inn s?nn at den venter litt f?r den snur kortene tilbake teller = 0; } else { teller = 0; } } } } } public void leggTilKnapper() { panel = new JPanel(); panel.setLayout(new GridLayout(kontroller.hentRader(), kontroller.hentKolonner())); Kort[][] kortstokk = kontroller.kortstokk(); for (int rad = 0; rad < kortstokk.length; rad++) { for (int kol = 0; kol < kortstokk[rad].length; kol ++) { Kort kort = kortstokk[rad][kol]; Kortknapp kortknapp = new Kortknapp(kort); kortknapp.setBackground(Color.red); kortknapp.setBorder(BorderFactory.createLineBorder(Color.white)); kortknapper[rad][kol] = kortknapp; panel.add(kortknapp); } } vindu.add(panel, BorderLayout.CENTER); } public void snuKort(Kort kort, int rad, int kol) { // s?rger for at GUI endrer knappene sine n?r modellen har endret innhold if (kort.erSnudd()) { kortknapper[rad][kol].setBackground(Color.white); kortknapper[rad][kol].setText(kort.hentVerdi()); kortknapper[rad][kol].setBorder(BorderFactory.createLineBorder(Color.black)); } else { kortknapper[rad][kol].setBackground(Color.red); kortknapper[rad][kol].setText(""); kortknapper[rad][kol].setBorder(BorderFactory.createLineBorder(Color.white)); } } }