import javax.swing.*; import java.awt.*; import java.awt.event.*; class Kalkulator { private static JLabel tekst = new JLabel("0"); private static String forrigeTall = ""; private static int knappStorrelse = 140; private static String operasjon = "+"; public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { System.exit(1); } JFrame vindu = new JFrame("Kalkulator"); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); vindu.add(panel); lagTekstStil(); panel.add(tekst); JPanel knapper = new JPanel(); panel.add(knapper); knapper.setLayout(new GridLayout(4,3)); knapper.setBackground(Color.BLACK); leggTilTallKnapper(knapper); leggTilOperasjonsKnapper(knapper); panel.setBackground(Color.BLACK); vindu.pack(); vindu.setVisible(true); } private static void lagTekstStil(){ tekst.setBackground(Color.BLACK); tekst.setForeground(Color.WHITE); tekst.setOpaque(true); tekst.setFont(new Font("times new roman", Font.BOLD, 40)); tekst.setAlignmentX(Component.CENTER_ALIGNMENT); tekst.setPreferredSize(new Dimension(knappStorrelse * 4, knappStorrelse)); } static class TallKnapp extends JButton { public TallKnapp(String tall){ super(tall); setForeground(Color.WHITE); setBackground(Color.BLACK); setPreferredSize(new Dimension(knappStorrelse, knappStorrelse)); setFont(new Font("times new roman", Font.CENTER_BASELINE, 40)); addActionListener(new TallAction()); } class TallAction implements ActionListener{ @Override public void actionPerformed(ActionEvent e){ String nyTekst = tekst.getText(); if(!getText().equals(".")){ if(nyTekst.equals("0")){ nyTekst = ""; } } else { if(nyTekst.contains(".")) return; } nyTekst += getText(); tekst.setText(nyTekst); } } } private static void leggTilTallKnapper(JPanel panel) { int teller = 9; for(int i = 0; i < 3; i++){ for(int j = 2; j >= 0; j--){ String tall = Integer.toString(teller - j); TallKnapp knapp = new TallKnapp(tall); panel.add(knapp); } teller -= 3; } panel.add(new TallKnapp("0")); panel.add(new TallKnapp(".")); } static class OperasjonsKnapp extends JButton { public OperasjonsKnapp(String operasjon){ super(operasjon); setBackground(Color.ORANGE); setForeground(Color.BLACK); setPreferredSize(new Dimension(knappStorrelse, knappStorrelse)); setFont(new Font("times new roman", Font.BOLD, 40)); addActionListener(new OperasjonAction()); } class OperasjonAction implements ActionListener { @Override public void actionPerformed(ActionEvent e){ if(getText().equals("=")){ if(forrigeTall.equals("")) return; Double tall1 = 0.0, tall2 = 0.0; try{ tall1 = Double.parseDouble(forrigeTall); tall2 = Double.parseDouble(tekst.getText()); }catch (Exception exception){ return; } Double resultat = 0.0; if(operasjon.equals("+")){ resultat = tall1 + tall2; } else if(operasjon.equals("-")){ resultat = tall1 - tall2; } else if(operasjon.equals("/")){ resultat = tall1 / tall2; } else if(operasjon.equals("*")){ resultat = tall1 * tall2; } forrigeTall = ""; tekst.setText(Double.toString(resultat)); } else { operasjon = getText(); forrigeTall = tekst.getText(); tekst.setText("0"); } } } } private static void leggTilOperasjonsKnapper(JPanel panel) { panel.add(new OperasjonsKnapp("+"), 3); panel.add(new OperasjonsKnapp("-"), 7); panel.add(new OperasjonsKnapp("*"), 11); panel.add(new OperasjonsKnapp("="), 12); panel.add(new OperasjonsKnapp("/"), 15); } }