KTH 2D1310: Programmeringsteknik
2D1311: Programmeringsteknik med PBL
Nada

Källkod för Applet-kalkylator.

Koden kan även hittas här.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

/** Klassen Kalkylator beskriver en appletbaserad grafikkalkylator. */
public class Kalkylator extends Applet implements ActionListener {

    // Behövs ingen main().

    /* Instansvariablerna */

    // Samma som i textversionen, kalkylatorns funktionalitet.
    private double tal1;
    private double tal2;
    private char operator;
    private double resultat;

    // Nya, grafikvariabler.
    private TextField tal1Text;
    private TextField tal2Text;
    private Label resultattext;


    /** Konstruktormetoden.  Initierar en nyskapad Kalkylator med
        startvärdena (tal1 = 0, tal2 = 0, operator = '+', resultat =
        0) */
    public Kalkylator() {
	tal1 = 0.0;
	tal2 = 0.0;
	operator = '+';
	resultat = 0.0;
    }


    /****************************************
     * Först kommer de nya "grafikmetoderna"
     *  - init()
     *  - actionPerformed(...)
     * Därefter kommer de gamla metoderna. 
     ****************************************/


    /** Initierar Kalkylatorn.  Ser till att alla komponenter kommer
        på plats.  */
    public void init() {
	// Hela Kalkylatorns layout.
	setLayout(new GridLayout(4, 1));

	Panel p;
	Button b;

	// Komponenter till första talet.
	p = new Panel();
	p.setLayout(new GridLayout(1, 3));
	p.add(new Label("Tal1: "));
	tal1Text = new TextField(Double.toString(tal1));
	p.add(tal1Text);
	b = new Button("OK");
	b.addActionListener(this);
	b.setActionCommand("tal1ok");
	p.add(b);
	add(p);

	// Komponenter till andra talet.
	p = new Panel();
	p.setLayout(new GridLayout(1, 3));
	p.add(new Label("Tal2: "));
	tal2Text = new TextField(Double.toString(tal2));
	tal2Text.addActionListener(this);
	p.add(tal2Text);
	b = new Button("OK");
	b.setActionCommand("tal2ok");
	b.addActionListener(this);
	p.add(b);
	add(p);

	// Operator-knapparna.
	p = new Panel();
	p.setLayout(new GridLayout(1, 4));

	b = new Button("+");
	b.addActionListener(this);
	p.add(b);

	b = new Button("-");
	b.addActionListener(this);
	p.add(b);

	b = new Button("*");
	b.addActionListener(this);
	p.add(b);

	b = new Button("/");
	b.addActionListener(this);
	p.add(b);

	add(p);

	// Resultatraden.
	p = new Panel();
	p.setLayout(new GridLayout(1, 1));
	resultattext = new Label("Väntar på inmatning...");
	p.add(resultattext);
	add(p);

	// Gör hela rasket synligt.
	setVisible(true);
    }


    /** Tar hand om användarens interaktion.
	@param e Den typ av "action" som inträffade.
     */
    public void actionPerformed(ActionEvent e) {
	String svar = e.getActionCommand();

	// Uppdatera tal1.
	if (svar.equals("tal1ok")) {
	    try {
		/* tal1 sätts om ifall rutans värde kan omvandlas till
                   double */
		tal1 = (new Double(tal1Text.getText())).doubleValue();
	    }
	    catch (NumberFormatException nfe) {
		// ...annars skrivs felmeddelande ut.
		resultattext.setText("Tal 1 är felaktigt!");
	    }
	}

	// Uppdatera tal2.
	else if (svar.equals("tal2ok")) {
	    try {
		/* tal2 sätts om ifall rutans värde kan omvandlas till
                   double */
		tal2 = (new Double(tal2Text.getText())).doubleValue();
	    }
	    catch (NumberFormatException nfe) {
		// ...annars skrivs felmeddelande ut.
		resultattext.setText("Tal 2 är felaktigt!");
	    }
	}

	// Ta reda på operatorn och beräkna.
	else if (svar.length() == 1 &&
		 "+-*/".indexOf(svar) != -1) {

	    operator = svar.charAt(0);
	    beräkna();

	    resultattext.setText(geResultatString());
	    /* tal1 + " " + operator + " " + tal2 + " är " + resultat
	       + "!"); */
	}

	/* Uppdatera alltid textrutorna.  Om inget tal ändrats kommer
	    det stå samma efteråt - gör inget. */
	tal1Text.setText("" + tal1);
	tal2Text.setText("" + tal2);
    }


    /********** URSPRUNGLIGA METODER **********/


    /** Beräknar resultatet baserat på tal1, tal2 och operator.  */
    public void beräkna() {
	if (operator == '+')
	    resultat = tal1 + tal2;
	else if (operator == '-')
	    resultat = tal1 - tal2;
	else if (operator == '*')
	    resultat = tal1 * tal2;
	else if (operator == '/')
	    resultat = tal1 / tal2;
    }


    /** Returnerar det senast beräknade resultatet.  */
    public String geResultatString() {
	return (tal1 + " " +
		operator + " " + 
		tal2 + " är " +
		resultat + "!");
    }
}

^ Upp till kurssidan.


Sidansvarig: <panda@nada.kth.se>
Senast ändrad 27 juni 2002
Tekniskt stöd: <webmaster@nada.kth.se>