import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Kalkulator { public static void main(String[] args) { GUI gui = new GUI(); Modell modell = new Modell(); gui.modell = modell; modell.gui = gui; gui.tegn(); } } class Modell { GUI gui; double arg1 = 0; double arg2 = 0; String funksjon_utfores = ""; String tekst_boks_innhold = ""; void leggInnTall(String tall) { if (tall.equals(".")) { leggTilKomma(); } else { tekst_boks_innhold += tall; } gui.settTekstBoks(tekst_boks_innhold); } void leggTilKomma() { if (!tekst_boks_innhold.contains(".")) { tekst_boks_innhold += "."; } } void brukOperasjon(String funksjon) { if (funksjon.equals("=") && !tekst_boks_innhold.isEmpty()) { arg2 = Double.valueOf(tekst_boks_innhold); double resultat = finnResultat(); arg1 = resultat; arg2 = 0; tekst_boks_innhold = resultat+""; funksjon_utfores = ""; gui.settTekstBoks(tekst_boks_innhold); return; } if (!funksjon_utfores.isEmpty()) { return; } else { funksjon_utfores = funksjon; arg1 = Double.valueOf(tekst_boks_innhold); tekst_boks_innhold = ""; gui.settTekstBoks(tekst_boks_innhold); } } double finnResultat() { if (funksjon_utfores.equals("x")) { return arg1 * arg2; } if (funksjon_utfores.equals("/")) { return arg1 / arg2; } if (funksjon_utfores.equals("+")) { return arg1 + arg2; } if (funksjon_utfores.equals("-")) { return arg1 - arg2; } return 0; } } class GUI { Modell modell; JLabel tekst_boks; public void settTekstBoks(String t) { tekst_boks.setText(t); } public void tegn() { JFrame vindu = new JFrame("Kalkulator"); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel hovedPanel = new JPanel(new GridLayout(2,1)); tekst_boks = new JLabel(" Velkommen! "); tekst_boks.setHorizontalAlignment(JLabel.CENTER); hovedPanel.add(tekst_boks); JPanel knappePanel = new JPanel(new GridLayout(4, 4)); char[] knappeNavn = {'7', '8', '9', 'x', '4', '5', '6', '/', '1', '2', '3', '+', '0', '.', '=', '-'}; for (char i : knappeNavn) { if (Character.isDigit(i) || i == '.') { JButton nyKnapp = new TallKnapp(i+"", modell); knappePanel.add(nyKnapp); } else { JButton nyKnapp = new FunksjonsKnapp(i+"", modell); knappePanel.add(nyKnapp); } } hovedPanel.add(knappePanel); vindu.add(hovedPanel); vindu.pack(); vindu.setVisible(true); } } class TallKnapp extends JButton { Modell modell; class TallTrykk implements ActionListener { @Override public void actionPerformed(ActionEvent e) { modell.leggInnTall(getText()); }; } TallKnapp(String tall, Modell m) { super(tall); addActionListener(new TallTrykk()); modell = m; } } class FunksjonsKnapp extends JButton { Modell modell; class FunksjonsTrykk implements ActionListener { @Override public void actionPerformed(ActionEvent e) { modell.brukOperasjon(getText()); }; } FunksjonsKnapp(String tall, Modell m) { super(tall); setBackground(Color.GRAY); addActionListener(new FunksjonsTrykk()); modell = m; } }