import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.awt.*; /* VIEW * Ansvarsomraade: Vise opp sjekklisten */ public class GUI { Kontroller kontroller; public GUI (Kontroller kontroller) { this.kontroller = kontroller; } // Starter et nytt GUI-vindu hvor sjekklisten i modellen tegnes opp. Bruker kan trykke paa knappene for aa oppatere // modellen og sjekke av ting paa listen. public void tegnOpp() { /* Setup-kode til GUI vinduet */ try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.exit(1); } JFrame vindu = new JFrame("Sjekkliste"); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel hovedPanel = new JPanel(); vindu.add(hovedPanel); /* Kode for aa tegne opp sjekklisten */ // Legger til et panel paa hovedpanelen for at sjekklisten ikke skal fylle opp hele skjermen JPanel panel = new JPanel(); hovedPanel.add(panel); // Setter GridLayout hvor foerste kolonne inneholder knapper og venstre inneholder teksten for tingen // som skal sjekkes av int rader = kontroller.antRader(); int kol = 2; panel.setLayout(new GridLayout(rader, kol)); // Naar en knapp trykkes paa, skal teksten endres til X (eller fjernes hvis allerede var X), og modellen skal // oppdateres for aa krysse av paa listen class SjekkKnapp implements ActionListener { JButton knapp; String ting; public SjekkKnapp(JButton knapp, String ting) { this.knapp = knapp; this.ting = ting; } @Override public void actionPerformed(ActionEvent e) { knapp.setText(kontroller.hentSjekkTegn(ting)); kontroller.kryssAv(ting); } } // Gaar gjennom modellen sin liste og viser frem for (String ting : kontroller.hentListe().keySet()) { JLabel tekst = new JLabel(ting); JButton knapp = new JButton(""); knapp.setPreferredSize(new Dimension(50, 50)); knapp.addActionListener(new SjekkKnapp(knapp, ting)); panel.add(knapp); panel.add(tekst); } /* Slutt-kode til GUI-vinduet */ vindu.pack(); vindu.setVisible(true); } }