Modul 404
Kompetenz: Vorgabe interpretieren, objektbasiert mit einer Programmiersprache implementieren, dokumentieren und testen.
Objektbasiert programmieren nach Vorgabe
Ueli Hagger
Modul 404
Kompetenz: Vorgabe interpretieren, objektbasiert mit einer Programmiersprache implementieren, dokumentieren und testen.
Array, Jlist, DefaultModelList
Ueli Hagger
gemachte Übungen
Aufgabe Taschenrechner
1. Erzeugen sie ein lauffähiges Java Programm 2. Geben sie dieses Programm und das leere
Testformular einem Mitstudierenden.
3. Dieser soll ihr Programm nun testen und zum Abschluss ein Testprotokoll erstellen
4. Besprechen sie das Ergebnis
Feld / Array (Kapitel 10)
• z.B. int[] feld = new int[5];
• feld[3] = 12;
• feld[0] = 47;
Index [0] [1] [2] [3] [4]
Inhalt
Index [0] [1] [2] [3] [4]
Inhalt 12
Index [0] [1] [2] [3] [4]
Inhalt 47 12
Feld / Array
• Ein Array ist homogen, d.h. es kann nur Elemente mit gleichem Datentyp speichern.
• Die Indexierung beginnt immer mit null [0]
• Die Anzahl Elemente eins Arrays, d.h. sie kann zur Laufzeit nicht mehr verändert werden,
z.B. int[] feld = new int[5]; // 5 Elemente
• Es können auch mehrdimensionale Felder verwendet werden,
z.B. int [] [] matrix = new int [3] [2]; //3 Zeilen und 2 Spalten
• Wenn zur Laufzeit ein Felder angelegt werden muss, so kann die Grösse als int- Variable definiert und zur Laufzeit initialisiert werden. Sie kann jedoch nicht mehr verändert werden, z.B.
int groesse = 8;
int[] feld = new int[groesse]; // 8 Elemente
• Für die Bearbeitung von Feldern wird meistens eine for-Schleife verwendet.
String
• Ein String ist ein dynamisches Array
• Die Elemente sind von Datentyp char (homogen)
• Die Indexierung beginnt immer mit null [0]
• Ein String kann nur über Methoden bearbeitet werden, d.h. ein direkter Zugriff über den Index, z.B. [0] kann nicht erfolgen, z.B. xy.charAt(0)
• Die Länge des obigen Strings ist 10
Index 0 1 2 3 4 5 6 7 8 9
Inhalt
'H' 'a' 'l' 'l' 'o ' ' ' 'V' 'e' 'l' 'o'
Aufgaben
- Stoff, bzw. Übungen repetieren
- Aufgabe Felder fertigstellen, bzw. nochmals machen - Übung JList
Aufgabe: Felder (Teilaufgabe 1)
• Erstellen Sie ein Javaprojekt, dabei sind folgende Namenskonventionen zu verwenden
• Projektname: feld_ihrname
• Klassenname: Feld_ihrname
Erstellen sie folgendes Userinterface mit
▪ 2 Textfeldern
▪ 2 Labels
▪ 5 Buttons mit zugehörigen Eventhandler
• Verwenden sie sinnvolle Variablennamen
• Testen sie das Programm
Aufgabe: Felder (Teilaufgabe 2)
Definieren sie nun ein globales Integerfeld private int [] feld;
bei den Attributen.
Im Eventhandler des Buttons "Feld mit Zufallszahlen füllen"
wird nun als das Feld erzeugt, wobei die Grösse aus den Textfeld
"Feldgrösse" verwendet wird. Standardmässig wird 5 genommen werden, bzw. der Wert, welcher darin steht.
möglicher Code
int feldgroesse = Integer.parseInt(tF_groesse.getText());
feld = new int [feldgroesse];
• Füllen sie das Feld mit den Zahlen 1,2,3,4,5 (feldgrösse). Es muss eine Schleife verwendet werden.
• Geben Sie die letzte Zahl, welche sich im Feld befindet im Textfeld "Ergebnis" aus.
• Testen sie das Programm
Aufgabe: Felder (Teilaufgabe 3)
Füllen sie nun das Feld mit den Zufallszahlen.
// Zufallszahlen im Bereich 1 bis 100
int zzahl = 1 +(int)(Math.random()*((100 - 1)+1));
• Es muss eine Schleife verwendet werden.
Zur Kontrolle können Sie die Zahlen auf die Konsole ausgeben.
• Geben Sie die letzte Zahl, welche sich im Feld befindet im Textfeld "Ergebnis" aus.
• Testen sie das Programm
Aufgabe: Felder (Teilaufgabe 4)
• Programmieren sie nun schrittweise die anderen vier Methoden.
• Testen sie das Programm
Aufgabe: Felder (Teilaufgabe 5)
Nachdem die Teilaufgaben 1 bis 4 laufen soll das Programm noch verbessert werden.
a) Beim Start des Programmes sollen die Tasten Mittelwert, Summe, kleinste Zahl und grösste Zahl inaktiv sein. Sobald das Feld mit Zufallszahlen gefüllt ist, sollen sie aktive
werden.
b) Es soll eine Fehlermeldung erscheinen, wenn bei der Feldgrösse keine Zahl
eingegeben wird.
c) Das Ergebnisfeld soll nicht mehr editierbar sein.
• Testen sie das Programm laufend
Aufgabe: Felder (Teilaufgabe 6)
• Testen, siehe Folien testen
• Erstellen sie das Testformular mit Testfällen
• Testen sie die Funktionalität und füllen sie das Testformular aus.
• Erstellen sie einen Testbericht.
Testformular (Tabelle), siehe Folien testen
Testnummer: _____________________________
Testdatum: _____________________________
Programmname: _____________________________
Projektname: _____________________________
Version: _____________________________
Testperson: _________________________________
Testsystem (Betriebssystem): ___________________
IDE/Version: _______________________________
Java Version: _______________________________
Nr. Testsituation Aktion/Eingabe Erwartung/Ausgabe Effektives Resultat Erfüllt
J/N
15
DefaultListModel
DefaultListModel listenEintragungen = new DefaultListModel();
• Ein Objekt der Klasse DefaultListModel ist ein dynamisches Array.
• Die einzelnen Elemente sind mit Typ String
• Es kann nur über Methoden bearbeitet werden, d.h. ein direkter Zugriff über den Index, z.B. [0] kann nicht erfolgen.
• Nachfolgend ein Beispiel wo schon 5 Elemente hinzugefügt wurden.
Index 0 1 2 3 4
Inhalt
"Hallo" "12" "Das ist ein Satz" "12.5" "1. Zahl"
JList
• Die Einträge einer JList werden von einem Listenmodell verwaltet. Aus den Daten, die der JList im Konstruktor übergeben werden, wird ein unveränderliches Datenmodell
erstellt.
• Für einfachere dynamische Listen bietet sich die Klasse DefaultListModel an.
• Wenn man mit Vektoren (Array) vertraut ist, sollte es also auch leicht fallen, mit einem Listenmodell umzugehen.
17
JList/DefaultListModel
// Liste (Array)
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
list.setBounds(59, 53, 295, 152);
contentPane.add(list);
18
Übung
Verwenden sie folgende Namen:
• JavaProjekt: demo_Jlist_IhrName
• Klassenname: Demo_Jlist_IhrName
Erstellen sie folgendes Frame mit - Vier JLabel
- Drei JTextfield - Einem JButton - Einer JList
Denken sie daran die Variablennamen anzupassen
Übung
Nachdem Sie das Frame erstellt und getestet haben erstellen sie
- den EventHandler für den Button - den EventHandler für die JList
- Verschieben Sie den Code der beiden EventHander wie immer an den
Schluss.
- Testen sie, ob das Programm immer noch läuft.
Übung
• Nun soll das Feld (Array) -> DefaultListModel mit der JList verküpft werden.
• Die Zeile mit DefaultListModel müssen sie manuell ergänzen.
• Die farbigen Objektnamen sind freiwählbar.
• Testen sie nun das Programm.
// Liste (Array)
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
list.setBounds(249, 54, 212, 140);
contentPane.add(list);
Übung
• Nun muss das Eingabe noch in das Feld DefaultListModel geschrieben werden.
• Dafür programmieren sie in EventHandler des Buttons folgendes
• Testen sie danach das Programm.
btnUebernahme.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {
String eingabe = TxF_Eingabe.getText();
listenEintagungen.addElement(eingabe);
} // actionPerformed }); // addActionListener
Übung
• Wenn sie nun ein Element auswählen soll der gewählte Index bzw. der Feldinhalt ausgeben werden.
• Dafür haben wir den EventHandler bei der Jlist gemacht. Dieser wird immer abgearbeitet, wenn ein Element ausgewählt wird.
list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent arg0)
{
int index = list.getSelectedIndex(); // gewählter Index
String s_index = String.valueOf(index); // wandeln für Ausgabe tF_Index.setText(s_index); // ausgeben
tF_Auswahl.setText((String)listenEintagungen.elementAt(index));
} // valueChanged
}); // addListSelectionListener
Übung
• Damit auch noch eine Bildlaufleiste erscheint muss wieder eine ScrollPane hinzugefügt werden.
• Dafür können wir einen neuen Container erstellen und diesen in der JList positionieren. Dabei ist die Position und die Grösse noch nicht relevant.
• Passen sie nun den Code an. Dafür können sie den erzeugten Code der JScrollPane verschieben und folgendermassen anpassen.
Übung
• Passen sie nun den Code an. Dafür können sie den erzeugten Code der JScrollPane verschieben und folgendermassen anpassen.
• Testen sie nun das Programm.
// Liste (Array)
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(249, 54, 212, 140);
contentPane.add(scrollPane);
scrollPane.setViewportView(list);
Behandelte Elemente
JFrame
• Event handler
• ContentPane
Methoden DefaultListModel (JList)
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
// Anzahl Eintragungen in Liste
int anzahl = listenEintagungen.getSize();
// Element zu Liste hinzufügen
listenEintagungen.addElement("Hallo");
// Element an Position (hier 0) aus Liste lesen und // in einen String wandeln
String inhalt = listenEintagungen.getElementAt(0).toString();
27
Feld, Array
Objektname
Methoden DefaultListModel (JList)
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
// Anzahl Eintragungen in Liste
int anzahl = listenEintagungen.getSize();
// Element zu Liste hinzufügen
listenEintagungen.addElement("Hallo");
// Element an Position (hier 0) aus Liste lesen und // in einen String wandeln
String inhalt = listenEintagungen.getElementAt(0).toString();
Aufgabe
Entwickeln sie ein Java-Programm, welches in ein Textfeld eingegeben Zahlen untereinander in eine JList ausgibt.
• Zusätzlich soll laufend der berechnete Mittelwert ausgegeben werden.
• Nebenstehend finden sie ein GUI, welches sicher nicht schön dargestellt ist.
1. Entwerfen sie ein GUI
2. Implementieren sie ein Eventhandler (actionPerformed) bezogen auf die Eingabe (Textfeld links)
Dabei soll die Eingabe gespeichert und ausgegeben werden und erst danach der Inhalt des Feldes für die Berechnung verwendet werden.
3. Testen sie ihr Programm aus
DefaultListModel listenEintagungen = new DefaultListModel();
JList list = new JList(listenEintagungen);
JList/DefaultListModel
eingabe.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {
double summe = 0;
String wert = eingabe.getText();
listenEintagungen.addElement(wert);
int anzahl = listenEintagungen.getSize();
int i;
for (i= 0; i<anzahl;i++) {
summe += Double.parseDouble(listenEintagungen.getElementAt(i).toString());
}
auswahl.setText(String.valueOf(summe/anzahl));
eingabe.setText("");
} });
30