We zullen een eenvoudig programma ontwerpen waarbij de gebruiker een temperatuur in graden Fahrenheit converteert naar het equivalent in graden Celsius. De formule is c = (f - 32) * 5 / 9 met f = graden Fahrenheit en c = graden Celsius
Het formulier is reeds aangemaakt. Het is een goed idee om het bestaande formulier eerst wat te 'verkennen'.
Klik met de muis op elk van de 5 besturingselementen. Deze zijn hieronder afgebeeld.
Aan de linkerkant staan er 2 labels (JLabel). In het midden staan er 2 tekstvakken (JTextBox). Aan de rechterkant staat er 1 knop (JButton).
Een label wordt gebruikt om iets aan de gebruiker te laten zien. Via een tekstvak kan de gebruiker invoer geven en via het klikken op de knop wordt een event gegenereerd.
Linksonderaan zie je een lijst met de besturingselementen. Rechtsonderaan vind je een lijst van alle eigenschappen (Properties) van een besturingselement.
De belangrijkste properties momenteen zijn text (= het opschrift) en name (= de naam) van het besturingselement.
De name van een label beginnen we - omwille van de leesbaarheid van de code - met lbl, de name van een tekstvak beginnen we met txt en de name van een button beginnen we met btn.
De werking van het programma is als volgt:
De gebruiker geeft een aantal graden fahrenheit in in het tekstvak txtGradenFahrenheit
Er wordt op de knop met opschrift Bereken geklikt
De uitvoer verschijnt in het tekstvak txtGradenCelsius
Als we willen beginnen met het schrijven van de programmacode moeten we in NetBeans dubbelklikken op de knop Bereken. Door NetBeans wordt er achter de schermen heel wat code automatisch gegenereerd. Let op! Dit is de verantwoordelijkheid van NetBeans, dit is niet typisch voor Java!
Sommige dingen zijn al onmiddellijk zichtbaar
Java werkt met class'es
Er moet een main aanwezig zijn om het programma te kunnen uitvoeren
Java werkt met accolades om blokken code te groeperen
Een programmeerlijn wordt afgesloten met ;
Een enkele regel commentaar wordt voorafgegaan door // (bijvoorbeeld // TODO Add your handling code here: ...)
Meerdere regels commentaar staan tussen / ** en */
Als de gebruiker het programma uitvoert, zal hij eerst in het tekstvak txtGradenFahrenheit het aantal graden Fahrenheit ingeven. Bij een druk op de knop Berekenen, moet dit getal binnen de programmeercode ‘verwerkt’ worden om zo het aantal graden Celsius te krijgen. Dit betekent dat het aantal graden Fahrenheit, dat de gebruiker ingeeft in het formulier, in de programmeercode beschikbaar moet zijn om ‘verwerkt’ te kunnen worden. Hiervoor gaan we in de programmeercode gebruik maken van variabelen. Zo’n variabele is eigenlijk een benoemde plaats in het computergeheugen waar je tijdelijk een waarde kan in stoppen.
De declaratie (= het aanmaken) en de initialisatie (= een waarde toekennen) van een variabele zal vaak de onderstaande vorm hebben:
double gradenFahrenheit = Double.parseDouble(txtGradenFahrenheit.getText());
Een variabele wordt gekenmerkt door een naam, een type en een inhoud.
Type van een variabele
Het type van de variabele hangt af van wat er in de variabele zal opgeslagen worden. Voorlopig zullen we ons beperken tot 3 types. Willen we een geheel getal opslaan in de variabele, dan zal de variabele van het type int zijn. Is de variabele bedoeld om een kommagetal te bevatten, dan zal de variabele van het type double zijn. Ten slotte is er nog het type String dat gebruikt wordt voor tekst. Dus
Geheel getal → int
Kommagetal → double
Tekst → String
Naam van een variabele
Opdat we de variabele zouden kunnen gebruiken in het programma, krijgt een variabele een naam. Het is belangrijk om een betekenisvolle naam te kiezen. Dit is gemakkelijker bij het programmeren zelf en ook als je achteraf het programma weer bekijkt.
Om de leesbaarheid van het programma te verhogen, gebruiken we camel casing. Dit wil zeggen dat elke letter van een nieuw woord begint met een hoofdletter. De eerste letter schrijven we echter met een kleine letter, bijvoorbeeld temperatuurCelsius
Inhoud van een variabele
Een variabele zou weinig zinvol zijn, mochten we niet de mogelijkheid hebben om er een specifieke inhoud in te stoppen. Doorgaans zal in de loop van een programma de inhoud van een variabele dikwijls wijzigen. Er zijn 3 zaken belangrijk bij de inhoud van een variabele
txtGradenFahrenheit.getText() → In dit voorbeeld programma willen we de tekst uit het besturingselement txtGradenFahrenheit opslaan in de variabele gradenFahrenheit. Daarom maken we gebruik van txtGradenFahrenheit.getText() en dus niet van txtGradenFahrenheit.
Double.parseDouble(txtGradenFahrenheit.getText()) → Zoals hiervoor gezegd, geeft txtGradenFahrenheit.getText() ons de tekst uit het tekstvak txtGradenFahrenheit. Deze tekst is van het type String. We willen deze tekst echter opslaan in een variabele van het type double, zodat we er straks mee kunnen rekenen. Daarom moeten we de tekst converteren naar het type double. Dat is precies wat Double.parseDouble(txtGradenFahrenheit.getText()); doet: de tekst van txtGradenFahrenheit.getText()wordt omgezet naar een double
Een laatste belangrijk element is wat links en wat rechts van het =-teken staat. In wiskunde is a = b identiek gelijk aan b = a. Bij programmeren is dat niet zo en is wat er links en wat er rechts van het =-teken komt, wel belangrijk. Aan de linkerkant van = staat de variabele waar we iets willen in stoppen. Aan de rechterkant van het =-teken staat wat we er willen in stoppen.
Via de variabelen gradenFahrenheit beschikken we in de programmeercode over het getal dat werd ingegeven door de gebruiker in txtGradenFahrenheit en staat dit klaar voor verwerking. We beslissen dat we het resultaat ook zullen opslaan in een variabele. Omdat het aantal graden Celsius opnieuw een reëel getal is, zal deze variabele ook van het type double zijn. Bij het aanmaken van deze nieuwe variabelen zijn opnieuw de naam, het type en de inhoud belangrijk.
double gradenCelsius = (gradenFahrenheit - 32) / 1.8;
Na het berekenen van het resultaat in de vorige stap, rest er ons nu nog 1 stap. Het berekende resultaat moet immers nog terug gegeven worden aan de gebruiker. Dit doen we op de onderstaande manier
txtGradenCelsius.setText(String.valueOf(gradenCelsius));
We kunnen dit lezen als gradenCelsius wordt gestopt in de tekst van het tekstvak txtGradenCelsius
Er verschijnen nogal veel cijfers na de komma. Dit kan je wijzigen als volgt:
txtGradenCelsius.setText(String.format("%,.3f", gradenCelsius));
Samenvatting
Voor de duidelijkheid staat hieronder nog de volledige listing van het programma
private void btnBerekenActionPerformed(java.awt.event.ActionEvent evt) {
// invoer
double gradenFahrenheit = Double.parseDouble(txtGradenFahrenheit.getText());
// verwerking
double gradenCelsius = (gradenFahrenheit - 32) / 1.8;
// uitvoer
txtGradenCelsius.setText(String.format("%,.3f", gradenCelsius));
}