|
Mit den nächsten Beispielen möchte ich 2 kleinere Projekte
vorstellen.
Um die Möglichkeiten aufzuzeigen, wie schnell man sich in JAVA
einarbeiten kann, folgende Bemerkungen dazu :
- diese Projekte sind komplett selbständig von 2 Schülern
Klassenstufe 12 entwickelt worden
- sie erhielten das JDK und haben sich mit JAVA und dessen Dokumentation
ca. 2 Wochen intensiver befaßt (im Unterricht und privat)
- ein Schüler programmiert seit ca. 1 Jahr in Pascal
- der andere Schüler hatte längere Erfahrungen mit Pascal
und C++
Entstanden sind ein Projekt GALGENRATEN bzw. Wortratespiel, in dem mit
Files zum Einlesen verschiedener Wörter und eingebundenen GIF-Grafiken
gearbeitet wurde.
Das andere Projekt stellt eine Datenbank mit Anbindung an eine EXCEL
CSV - Datei dar. Somit können auch Daten mittels Excel nachbearbeitet
oder erweitert werden.
Die Scripte sind gut ausdokumentiert. Nach etwas Einarbeitung in JAVA
lassen sie sich leicht verfolgen.
Abschlußbemerkung :
Die Projekte sind nach kurzer
Einarbeitung in Java komplett selbständig innerhalb von ca. 14 Tagen
entstanden. Dies zeigt 2 Dinge :
a) Als Informatiklehrer dürfte
uns die Einarbeitung in Java nicht zu schwer fallen und auch nicht zu viel
Zeit in Anspruch nehmen.
b) Viele Schüler haben
Interesse an Java gefunden, arbeiten sich schon selbständig ein, sind
damit motivierbar und den Lehrern sehr schnell um Vieles voraus.
Resultat : Schneller Einstieg mit den Schülern in Java und somit in die OOP !
Hier die Scripte :
1. Script (Hangman):
komplett
als ZIP (19,8 kB)
2. Script (Datenbank):
komplett
als ZIP (17 kB)
/*
HANGMAN FOR JAVA
(c)1998/99 by Markus Birth <Robo.Cop(a)gmx.net>
This is the first program I wrote in Java. Thanks
to
Mr. Fröbel for making me learning Java so
quick (We had to
finish our projects for the computer science
lessons.)
Things used for the making of this:
-Xemacs with its Revision Control System
-hangman.java from Carlos von Hoyningen-Huene
-some bottles of PEPSI Coke
-hints & tips from Carlos von Hoyningen-Huene
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Character.*;
import java.math.*; //
eigentlich nur für die eine Zufallszahl
import java.io.*;
// für Dateioperationen ("Tupfer, Schere
...")
public class hangman extends Frame {
// Globale Variablen
final static int WND_B=400,
WND_H=300;
final int SX=50, SY=50;
RandomAccessFile file;
String myword=null;
//
Wort: was es mal werden soll
char xyword[];
// Wort: xy-ungelöst
char probed[];
char notprobed[];
char alphab[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z',
'Ä','Ö','Ü','ß'};
int mistakes=0; //
Anzahl Fehler (MIST!-akes)
int tries=0;
// Anzahl Versuche
KL CONTROL;
char c;
public hangman() {
// Hauptroutine
String stmp=new String();
try {
int wordcount=0;
// neuer Integer für Wörterzahl
int wordseek=0;
// ~ für Zielwort-Position
// und jetzt machen wir die Datei auf: "Schwester: Skalpell!"
RandomAccessFile f=new
RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null)
{ // solange das, was wir lesen, nicht
nichts ist ...
if (stmp.charAt(0) != '#') {
// und da auch kein "#" am Anfang klebt ...
wordcount++;
// zähle es als Wort.
}
}
if (wordcount==0) {
System.out.println("ACHTUNG!
In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter
in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0)
{ // Solange wordseek noch
0 ist, tue ...
wordseek=(int)(Math.random()*wordcount)+1;
// hol' Dir einen Integer-Wert
}
System.out.print("Ausgewaehltes
Wort: #"+wordseek); // Statusbericht
f.seek(0);
// Position auf Dateianfang setzen
wordcount=0;
// Wieder auf NULL
while ((stmp=f.readLine())!=null)
{ // und das ganze wieder von
vorn
if (stmp.charAt(0) != '#') {
wordcount++;
if (wordcount==wordseek)
{ // wenn an Position,
die wir suchen ...
myword=stmp;
// setze myword auf gerade gelesenen String
break;
// und raus hier!
}
}
}
f.close();
// Datei wieder zunähen
}
catch(IOException ioe) {
//
Falls doch mal ein Fehler auftreten sollte ...
System.out.println("IOException:
"+ioe.toString()); // Fehlermeldung
und tschüß!
System.out.println("\n\nFehler
beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei
HANGMAN.DAT auch existiert und lesbar ist.");
System.exit(0);
}
CONTROL=new KL(); //
neuer KeyListener: CONTROL
addKeyListener(CONTROL); //
hinzufügen
xyword=new char[myword.length()];
// array erstellen
for (int i=0;i<myword.length();i++)
{ // array initialisieren
xyword[i]='_';
}
probed=new char[alphab.length];
// array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) {
// array initialisieren
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
} //Ergänzung
: Flackern beim Zeichen des Grafikbildschirms verhindern
//was nun noch flackert, ist das Überzeichnen
des Bildes bzw. Einlesen der Bilddatei
public void paint(Graphics
g) { // hier
die Grafik ...
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.black);
// Farbe auf SCHWARZ
g.fillRect(0,0,WND_B,WND_H);
// Fenster schön SCHWARZ machen!
g.setColor(Color.yellow);
// und Farbe auf GELB setzen
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1) {
g.drawString("Buchstaben:
",40,260);
for (int i=0;i<alphab.length;i++)
{
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler:
"+mistakes,40,230);
}
UpdateHangMan(g); //
Hangman updaten
}
public void UpdateHangMan(Graphics
g) {
Toolkit tk=Toolkit.getDefaultToolkit();
// Toolkit (für Grafikdatei-Support) zuweisen
switch(mistakes) { //
CASE mistakes of ...
case 6:
g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
g.setColor(Color.red);
g.drawString(">>> VERLOREN
<<<",WND_B/2-100,WND_H/2+10);
g.setColor(Color.white);
g.drawString("Das gesuchte
Wort war '"+myword+"'!",WND_B/2-100,WND_H/2+25);
removeKeyListener(CONTROL);
// Tastenkontrolle abschalten
break;
case 5:
g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
break;
case 4:
g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
break;
case 3:
g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
break;
case 2:
g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
break;
case 1:
g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
break;
case 0:
g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
break;
case -1:
g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
g.setColor(Color.green);
g.drawString(">>> GEWONNEN
<<<",WND_B/2-100,WND_H/2+20);
removeKeyListener(CONTROL);
break;
}
}
class KL implements KeyListener
{
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar();
// Taste holen
c=Character.toUpperCase(c);
// Buchstabe(?) evtl. GROß machen
int i;
// Wir brauchen bald ein Iiiiihh
boolean status=false;
// Booleans
boolean check=false;
// für versch. Status-Werte
for (i=0;i<alphab.length;i++)
{
if (c==alphab[i]) {
// wenn c = einer der Buchst. des Alphabets ist ...
if (probed[i]!=c)
probed[i]=c; else check=true; // und
der auch noch nicht vorher getippt wurde, dann ... u.s.w.
if (notprobed[i]==c)
notprobed[i]='-';
}
}
int underscores=0;
// Integer für Anzahl der "_" im bisher gepuzzleten Wort
for (i=0;i<myword.length();i++)
{
if (c==Character.toUpperCase(myword.charAt(i)))
{
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status &&
!check) mistakes++; // wenn falscher
Buchstabe und Buchst. nicht schonmal getippt: mistakes+1;
if (!check) tries++;
// solange nicht doppelter Tip: tries+1;
if (underscores==0 ||
mistakes>=6) {
System.out.println(" ("+myword+")");
System.out.println("Anzahl Versuche: "+tries+"
davon falsch: "+mistakes);
System.out.println("Getippte Buchstaben:
"+new String(probed));
System.out.println("Anzahl versch. Buchstaben
im Wort: "+(tries-mistakes));
System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
}
if (underscores==0)
mistakes=-1; // wenn keine fehlenden
Zeichen im Lösungswort ...
if (mistakes>=6) mistakes=6;
// wenn mehr als 5 Fehler ...
repaint();
// Grafikfenster neuzeichnen
}
}
public static void main(String
args[]) {
Frame frame=new hangman();
// neues Fenster
frame.addWindowListener(new
WindowAdapter() { // WindowListener
hinzufügen
public void windowClosing(WindowEvent
e) { // wenn auf X geklickt:
System.out.println();
System.exit(0);
// Programm beenden.
}
});
frame.setTitle("HangMan for Java - \u00a91998
by Markus Birth"); // Titel setzen
frame.setSize(WND_B, WND_H);
// Größe setzen
frame.show();
// und ab auf den Bildschirm damit!
/* Pictures
Image pic;
pic=Toolkit.getDefaultToolkit().getImage("image.jpg");
g.drawImage(pic,0,0,this);
*/
}
}
////////////////////////////////////////////////////////////////////////////////
// DATABANK - VERSION
1.0
//
//
von
//
//
Carlos von Hoyningen-Huene
//
//
//
// Enwickelt mit
den
//
//
Java Development Kit (JDK) 1.1.6 von Sun Microsystems
//
//
//
// Getestet auf
//
//
Windows NT 4.0, WIndows 98, Windows 95, Linux (Kernel 2.0.36) //
//
//
// Bei Fragen oder
Fehlern bin ich per Mail zu erreichen:
//
//
carlos.vhh@bigfoot.com
//
////////////////////////////////////////////////////////////////////////////////
// Bibliotheken einbinden für...
import java.applet.*;
//... die allgemeine Appletverwaltung
import java.awt.*;
//... das AWT-System (graphische Oberfläche
von Java)
import java.awt.event.*;
//... das AWT-Event-System
import java.io.*;
//... das IO-System
import java.util.*;
//... zusätzliche Dinge (hier: für die Vectoren entspr. Zeigern)
// Diese Daten können verarbeitet werden:
// nname
vname plz ort
str nr
// tel
fax mail url
geb.
class Person
// ein Objekt für die Personendaten
{
String data[]=new String[11];
// Feld für die einzelnen Daten initialisieren
public Person()
{
for
(int i=0;i<11;i++) data[i]=new String();//
die einzelnen Felder initialisieren
}
}
public class databank extends Frame
{
////////////////////////////////////////////////////////////////////////////////
//
Deklarationsteil der Variablen und Konstanten
////////////////////////////////////////////////////////////////////////////////
// Konstanten
final int MAX_ENTRY=11;
// max. Anzahl der Infos pro Person
final Frame parent_frame=this;
// "Zeiger" auf Hauptfenster (braucht FileDialogWindow)
// eigentlich gibt es keine Zeigerarithmetik in Java,
// aber einen passenderen Begriff gibt es nicht
// (siehe Code ab Zeile 303)
// alles für unseren Menübalken...
MenuBar menubar=new MenuBar();
// das Hauptmenü
Menu menu1=new Menu("Datei"),
// das Dateimenü
menu2=new Menu("Adresse");
// das Adressenmenü
// die Menüpunkte für unsere Menüs
MenuItem newf=new MenuItem("Neu"),
// neue Datenbank
open=new MenuItem("Öffnen"),// Datei
öffenen
save=new MenuItem("Speichern"),// Datei Speichern
exit=new MenuItem("Beenden"),// Programm beenden
newp=new MenuItem("Neu"), // neue Adresse
insert=new MenuItem("Einfügen"),// Adresse
einfügen
update=new MenuItem("Ändern"),// Adresse
aktualisieren
delete=new MenuItem("Entfernen");// Adresse
entfernen
// unsere graphischen Eingabeelemente
List lst=new List();
// unsere Adressenliste
TextField input[]=new TextField[MAX_ENTRY];//
unsere Eingabefelder als Feld,
// da Verwaltung einfacher ist
Label label[]=new Label[MAX_ENTRY];
//
Beschriftungen der Felder, auch als Feld
// für die Adressverwaltung
Vector adr=new Vector();
// die Adressen in einen dynamischen Feld
// In Java heiáen diese "Vectoren",
entsprechen
// aber von der technischen Seite her dem
// dynamischen Felder aus Pascal und C.
// Jedoch ist die Benutzung hier besser.
String fname, dname;
// Datei- und Verzeichnisname der Adressendatei
////////////////////////////////////////////////////////////////////////////////
//
Deklarationsteil der Methoden
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////
// *** databank - der Konstruktor
public databank()
{
// initialisiere das AWT-Eventsystem des Menus
...
// Die ITEM_xxx Bezeicher sind "inner classes",
welche die
// Steuerung der Menuitems verwalten (Deklaration
Unten)
// Jedes "Event" wird ab der AWT Version 1.1
als "inner class"
// gehandhabt (eine Objektklasse innerhalb einer
anderen).
newf.addActionListener(new
ITEM_NEUF());
open.addActionListener(new
ITEM_OPEN());
save.addActionListener(new
ITEM_SAVE());
exit.addActionListener(new
ITEM_EXIT());
newp.addActionListener(new
ITEM_NEUP());
insert.addActionListener(new
ITEM_INSERT());
update.addActionListener(new
ITEM_UPDATE());
delete.addActionListener(new
ITEM_DELETE());
// erstelle Hauptmenü ...
menu1.add(newf);
menu1.add(open);
menu1.add(save);
menu1.add(exit);
menubar.add(menu1);
menu2.add(newp);
menu2.add(insert);
menu2.add(update);
menu2.add(delete);
menubar.add(menu2);
setMenuBar(menubar);
// erstelle Eingabefelder und Labels ...
for
(int i=0;i<MAX_ENTRY;i++) input[i]=new TextField("",30);
label[0]=new
Label("Vorname",Label.RIGHT);
label[1]=new
Label("Nachname",Label.RIGHT);
label[2]=new
Label("Straße",Label.RIGHT);
label[3]=new
Label("Hausnummer",Label.RIGHT);
label[4]=new
Label("PLZ",Label.RIGHT);
label[5]=new
Label("Wohnort",Label.RIGHT);
label[6]=new
Label("Telefon",Label.RIGHT);
label[7]=new
Label("Fax",Label.RIGHT);
label[8]=new
Label("eMail",Label.RIGHT);
label[9]=new
Label("URL",Label.RIGHT);
label[10]=new
Label("Geburtstag",Label.RIGHT);
// Eingabefelder, Labels und Adressenliste in
Applet importieren ...
// Dieser Prozeß kann in Java OHNE die
Angabe von ABSOLUTEN KOORDINATEN
// durchgef?hrt werden.
// Java stellt dafür den "LayoutManager"
zur Verfügung, welcher die
// Elemente immer relativ zum systemsprezifischen
Programmfenster anordnet.
Panel
plabel=new Panel();
plabel.setLayout(new
GridLayout(MAX_ENTRY,1));
for
(int i=0;i<MAX_ENTRY;i++) plabel.add(label[i]);
Panel
pinput=new Panel();
pinput.setLayout(new
GridLayout(MAX_ENTRY,1));
for
(int i=0;i<MAX_ENTRY;i++) pinput.add(input[i]);
lst.addItemListener(new LST()); // hier wird noch das Listenevent aktiviert
setLayout(new
BorderLayout());
add("West",lst);
add("Center",plabel);
add("East",pinput);
}
//////////////////////////////////
// *** readFile - zum Einlesen der Adressen (aus
CSV-Datei)
public void readFile(String
filename)
{
Person
tmp;
// temporäre Variable für einen Datensatz
String
buf;
// temporäre Variable für Dateibearbeitung
char
ch[]=new char[1];
// ein Ein-Feld-Array f?r den String-Konstruktor
// (siehe Zeile 165)
int
entry;
// Eintrag eines Datensatzes, der gerade bearbeitet wird
lst.removeAll();
// Listenfeld leeren
adr.removeAllElements();
// Adressen aus Speicher entfernen
try
{
RandomAccessFile f=new RandomAccessFile(filename,"r");//
Datei oeffnen
while ((buf=f.readLine())!=null)// Zeile einlesen
{
// Zeile verarbeiten...
entry=0;
tmp=new Person();
for (int i=0;i<buf.length();i++)
{
ch[0]=buf.charAt(i);// Zeichen aus String
lesen
switch(ch[0])
{
case ';':
// wenn Trennzeichen ';', nächster Eintrag
entry++;
break;
case '\n':
// wenn neue Zeile (zwei Varianten, da Unix und Windows
case '\r':
// hier unterschiedliche Zeichen verwenden), Adresse in
// die Adress-Kette einfügen
adr.addElement(tmp);
break;
default:
// wenn kein besonderes Zeichen,
// füge das Zeichen an den Datensatz-
// eintrag an
tmp.data[entry]=tmp.data[entry].concat(new String(ch));
break;
}
}
}
f.close();
// Datei schließen
}
catch(IOException
e)
{
System.out.println(e.toString()); // falls
Fehler: ihn ausgeben
}
}
//////////////////////////////////
// *** writeFile - zum Sichern der Adressen (in
CSV-Datei)
public void writeFile(String
filename)
{
Person
tmp;
// temporäre Variable für einen Datensatz
try
{
RandomAccessFile f=new RandomAccessFile(filename,"rw"); //
Datei öffnen
for (int i=0;i<adr.size();i++) // alle
Adressen abspeichern
{
tmp=new Person();
tmp=(Person)adr.elementAt(i);
for (int j=0;j<MAX_ENTRY;j++) f.writeBytes(tmp.data[j]+";");
// Daten
// in Datei schreiben
f.writeBytes("\r\n"); // Zeilenende
in Datei schreiben
}
f.close();
}
catch(IOException
e)
{
System.out.println(e.toString()); // Fehler
? Hoffentlich nicht!
}
}
//////////////////////////////////
// *** showList - schreibt den Vector adr in
die Liste lst
public void showList()
{
Person
tmp=new Person();
lst.removeAll();
sortList();
// eigene Routine (siehe 229)
if
(!adr.isEmpty())
{
for (int i=0;i<adr.size();i++)
{
tmp=(Person)adr.elementAt(i);// Element aus
Vector holen
lst.addItem(tmp.data[0]+", "+tmp.data[1]);//
Element in Liste einfügen
}
}
}
//////////////////////////////////
// *** sortList - sortiert die Eintraege im Vector
adr
public void sortList()
{
// hier wird ein simpler Sortieralgorithmus durchgef?hrt,
der
// die Adresse alphabetisch, aufsteigend in dem
Vector sortiert.
// (Diesen Algorithmus sollte wirklich JEDER
erklären konnen :-)
Person
tmp1=new Person(),
tmp2=new Person(),
swp=new Person();
lst.removeAll();
if
(!adr.isEmpty())
{
for (int i=0;i<adr.size();i++)
{
for (int j=0;j<adr.size();j++)
{
tmp1=(Person)adr.elementAt(i); // Element an der Position i
// aus den Vector adr holen
tmp2=(Person)adr.elementAt(j);
if (tmp1.data[0].compareTo(tmp2.data[0])<0) //
Zwei Strings vergleichen
{
swp=tmp1;
tmp1=tmp2;
tmp2=swp;
adr.setElementAt(tmp1,i); // vertauschte Daten
an die
adr.setElementAt(tmp2,j); // entsprechende
Position in "adr" schreiben
}
}
}
}
}
//////////////////////////////////
// *** main - das Hauptprogramm
public static void main(String
args[])
{
Frame
frame=new databank();
// Frame-Objekt aus "databank" generieren
// jetzt wird ein "Window-Event" den Frame hinzugefügt,
so das man mit der
// Systemspezifischen Tastenkombination (unter
Windows ALT+F4) das Programmfenster
// schlieáen kann. Normalerweise l?uft
ein Java-Programm solange der Interpreter
// läuft und kümmert sich nicht um
die System-Events (z.B. Fenster schließen)
frame.addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.setTitle("Databank
- Version 1.0 by Carlos von Hoyningen-Huene");
frame.setSize(500,400);
frame.show();
}
////////////////////////////////////////////////////////////////////////////////
//
Deklarationsteil der inneren Klassen
////////////////////////////////////////////////////////////////////////////////
// wenn Menuitem "Neu" im Menü Datei aktiviert
wird...
class ITEM_NEUF implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
lst.removeAll();
// Liste leeren
adr.removeAllElements();
// Vector leeren
for (int i=0;i<MAX_ENTRY;i++) input[i].setText(""); //
Eingabefelder leeren
}
}
// wenn Menuitem "?ffnen" aktiviert wird...
class ITEM_OPEN implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
// FileDialog-Fenster aktivieren, um Dateinamen auszuw?hlen
//
Statt der Variablen "parent_frame", koennte man normalerweise
//
"this" verwenden. Da dies jedoch ein anderes Objekt als das
//
Programmfenster ist, wuerde "this" nicht auf unser Programm zeigen.
//
Daher verwendet man hier eine Variable, der man das Handle unseres
//
Programmes zuweist
FileDialog d=new FileDialog(parent_frame, "Datei oeffnen...");
d.setFile("*.csv");
// Standard-Datei-Maske setzen
d.setDirectory(".");
// aktuelles Verzeichnis setzen
d.show();
// das Fenster anzeigen
String openFile;
if ((openFile=d.getFile())!=null)
{
fname=openFile;
// gew?hlter Dateiname
dname=d.getDirectory(); // gew?hlter Verzeichnisname
}
readFile(dname+fname);
// Datei einlesen
showList();
}
}
// wenn Menuitem "Speichern" aktiviert wird...
class ITEM_SAVE implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
//
wie beim ?ffnen
FileDialog d=new FileDialog(parent_frame, "Datei speichern unter...");
d.setFile("*.csv");
d.setDirectory(".");
d.show();
String saveFile;
if ((saveFile=d.getFile())!=null)
{
fname=saveFile;
dname=d.getDirectory();
}
writeFile(dname+fname); //
Datei schreiben
}
}
// wenn Menuitem "Beenden" aktiviert wird...
class ITEM_EXIT implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
System.exit(0); // klar, oder ???
}
}
// wenn Menuitem "Neu" im Menue Adresse aktiviert
wird...
class ITEM_NEUP implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
for (int i=0;i<MAX_ENTRY;i++) input[i].setText(""); //
Alle Eingabefelder leeren
}
}
// wenn Menuitem "Einfuegen" aktiviert wird...
class ITEM_INSERT implements
ActionListener
{
Person
tmp;
public
void actionPerformed(ActionEvent e)
{
tmp=new Person();
// Eigentlich passt das ganze in eine for-Schleife,
//
nur da mein Dateiformat die Daten in einer anderen
//
Reihenfolge zur Verfuegung stellt, als sie in den
//
Eingabefeldern angezeigt werden, ist eine manuelle Zuweisung
//
notwendig.
tmp.data[0]=input[1].getText();
tmp.data[1]=input[0].getText();
tmp.data[2]=input[4].getText();
tmp.data[3]=input[5].getText();
tmp.data[4]=input[2].getText();
tmp.data[5]=input[3].getText();
tmp.data[6]=input[6].getText();
tmp.data[7]=input[7].getText();
tmp.data[8]=input[8].getText();
tmp.data[9]=input[9].getText();
tmp.data[10]=input[10].getText();
adr.addElement(tmp);
showList();
}
}
// wenn Menuitem "?ndern" aktiviert wird...
class ITEM_UPDATE implements
ActionListener
{
Person
tmp;
public
void actionPerformed(ActionEvent e)
{
tmp=new Person();
int id=lst.getSelectedIndex(); // ausgew?hlte
Item-ID abfragen
// Datensatz aktualisieren
if (id>=0 && id<adr.size())
{
tmp.data[0]=input[1].getText();
tmp.data[1]=input[0].getText();
tmp.data[2]=input[4].getText();
tmp.data[3]=input[5].getText();
tmp.data[4]=input[2].getText();
tmp.data[5]=input[3].getText();
tmp.data[6]=input[6].getText();
tmp.data[7]=input[7].getText();
tmp.data[8]=input[8].getText();
tmp.data[9]=input[9].getText();
tmp.data[10]=input[10].getText();
adr.setElementAt(tmp,lst.getSelectedIndex()); //
Datensatz in
// den Vector an die Position des alten
// setzen.
}
showList();
}
}
// wenn Menuitem "Entfernen" aktiviert wird...
class ITEM_DELETE implements
ActionListener
{
public
void actionPerformed(ActionEvent e)
{
int i=lst.getSelectedIndex();
if (lst.isIndexSelected(i))
{
lst.deselect(i); //
Markierung entfernen, da sonst Fehler
// auftauchen (hat was mit dem Betriebssystem
// zu tun)
adr.removeElementAt(i); // Element an der Vectorposition i entfernen
showList();
}
}
}
// wenn Listenlement selektiert...
class LST implements ItemListener
{
public
void itemStateChanged(ItemEvent e)
{
Person tmp=new Person();
//
Daten in den Eingabefeldern aktualisieren
if (lst.getSelectedIndex()!=-1)
{
tmp=(Person)adr.elementAt(lst.getSelectedIndex());
input[0].setText(tmp.data[1]);
input[1].setText(tmp.data[0]);
input[2].setText(tmp.data[4]);
input[3].setText(tmp.data[5]);
input[4].setText(tmp.data[2]);
input[5].setText(tmp.data[3]);
input[6].setText(tmp.data[6]);
input[7].setText(tmp.data[7]);
input[8].setText(tmp.data[8]);
input[9].setText(tmp.data[9]);
input[10].setText(tmp.data[10]);
}
}
}
}
|