import java.util.Scanner; import java.awt.event.*; import javax.swing.*; class GrafiskBrukergrensesnitt implements Brukergrensesnitt { private Kontroll kontroll; private JButton oekButton, resetButton; private JFrame vindu; private JLabel verdiLabel; private JLabel verdiLedetekstLabel; private JPanel panel; @Override public void init(Kontroll k) { kontroll = k; vindu = new JFrame("Teller"); panel = new JPanel(); vindu.add(panel); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); oekButton = new JButton(" +1 "); oekButton.addActionListener(new OekTeller()); resetButton = new JButton("Nullstill"); resetButton.addActionListener(new NullstillTeller()); verdiLedetekstLabel = new JLabel("Verdi: "); verdiLabel = new JLabel(" "); panel.add(verdiLedetekstLabel); panel.add(verdiLabel); panel.add(oekButton); panel.add(resetButton); vindu.pack(); vindu.setLocationRelativeTo(null); vindu.setVisible(true); } @Override public void visFramVerdi(int t) { verdiLabel.setText(((Integer) t).toString()); } class OekTeller implements ActionListener { @Override public void actionPerformed(ActionEvent e) { kontroll.oekTeller(); } } class NullstillTeller implements ActionListener { @Override public void actionPerformed(ActionEvent e) { kontroll.nullstillTeller(); } } } public class TellerProgram { public static void main(String[] args){ if(args.length == 0) { System.out.println("Programmet m? startes med enten G eller K som parameter"); } else { String type = args[0].substring(0,1).toUpperCase(); Kontroll k = new Kontroll(type); k.init(); } } } interface Brukergrensesnitt { void init(Kontroll k); void visFramVerdi(int t); } class Teller { private int tellerverdi = 0; int hentVerdi() { return tellerverdi; } void oekTeller() { ++tellerverdi; } void nullstillTeller() { tellerverdi = 0; } } class Kontroll { private Brukergrensesnitt gui; private Teller modell; public void init() { gui.init(this); } void oekTeller() { modell.oekTeller(); int x = modell.hentVerdi(); gui.visFramVerdi(x); } void nullstillTeller() { modell.nullstillTeller(); int x = modell.hentVerdi(); gui.visFramVerdi(x); } Kontroll(String type) { System.out.println("Typen er: '" + type + "'"); if (type.toUpperCase().equals("K")) { gui = new KommandoBrukergrensesnitt(); } else { gui = new GrafiskBrukergrensesnitt(); } modell = new Teller(); } } class KommandoBrukergrensesnitt implements Brukergrensesnitt { Kontroll kontroll; @Override public void init(Kontroll k) { kontroll = k; boolean fortsett = true; Scanner innData = new Scanner(System.in); System.out .println("Bruksanvisning: \nTast 1 for ? ?ke med 1 \nTast 0 for ? nullstille \nTast X for ? avslutte"); while (fortsett) { String kommando = innData.nextLine(); if (kommando.charAt(0) == '1') kontroll.oekTeller(); else if (kommando.charAt(0) == '0') kontroll.nullstillTeller(); else if (kommando.toUpperCase().charAt(0) == 'X') fortsett = false; } innData.close(); } @Override public void visFramVerdi(int t) { System.out.println("Verdien er: " + t); } }