www.r-krell.de |
Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr |
Willkommen/Übersicht > Informatik > Informatik mit Java, Teil e) > param. Sortierte Liste
Nach dem Webstart erscheint links oben das Testprogramm in einem Extra-Fenster:
Zunächst muss (indirekt durch die Zeile) ein Elementtyp und durch Anklicken ein Sortierkriterium
ausgewählt und die passende Liste durch Tastendruck [neue, leere SortListe anlegen..] erzeugt werden;
danach können alle Felder des Elements ausgefüllt und das Element sortiert eingefügt werden.
Weitere Hinweise zur Bedienung/Verwendung finden sich unten auf dieser Webseite in der Anleitung!
Wenn die Java-JRE (ab Version 1.8) installiert ist, können Sie das Programm jetzt sofort ausführen:
Hier klicken zum Webstart der (neuen) Sortierten Liste |
Danach Öffnen von SortListe_neu.jnlp [mit Java(TM) Webstart Launcher
(Standard)] wählen/bestätigen
und bei evtl. Sicherheitswarnung vor der Ausführung von P_Start das Risiko akzeptieren und OK drücken.
Wenn Sie außerdem gefragt werden, ob Sie eine Desktop- und eine Startmenüverknüpfung
anlegen wollen,
sollten Sie zustimmen, wenn Sie das Test-Programm auch nach Verlassen dieser Webseite nochmal ausprobieren wollen.
Wird nach dem Klick SortListe_neu.jnlp herunter geladen oder werden Sie gefragt, womit Sie SortListe_neu.jnlp
öffnen wollen
oder ob/wohin Sie die Datei speichern wollen, haben Sie entweder kein Java installiert oder ihr Browser (z.B. Opera) unterstützt keinen
Webstart.
Im letzten Fall empfiehlt sich nachfolgend der Download der .jar-Datei:
Sie können das Testprogramm für die parametrisierte Sortierte Liste auch als ausführbare Java-Datei SortListe_neu(r-krell.de).jar (20 kB) herunter laden und später lokal auf Ihrem Rechner starten (Java-Umgebung JRE ab Version 1.8 vorausgesetzt). Die Ausführung als Applet im Browser wird von mir hingegen nicht mehr angeboten: Gründe, Abhilfe und alle Downloads (in neuem Tab)
Bedienungsanleitung und komplette Quelltexte folgen jetzt auf dieser Seite:
Mit dem Aussuchen eines Sortierkriteriums wird indirekt auch der Elementtyp (Schüler oder Artikel) gewählt. Dann muss dafür eine
neue Liste erzeugt werden. Erst danach hat es Sinn, drei Attribute passend zum gewählten Elementtyp einzutippen und den Schüler bzw. den
Supermarktartikel in die Liste aufzunehmen (In meinem Webangebot gibt es auch noch eine ältere Sortierte
Liste, die ohne Parametrisierung weniger typsicher ist, und auch gemischt beliebige Objekte aufnehmen könnte). Hier, in der modernen Form,
können jetzt nur weitere Elemente des anfangs gewählten Typs - Schüler oder Supermarktartikel - folgen. Beim Einfügen
positioniert das Programm automatisch das Element an die richtige Stelle innerhalb der Liste - entsprechend des anfangs einmal gewählten
Sortierkriteriums. Eine spätere Änderung des Sortierkriteriums für eine bereits vorhandene Liste ist nicht möglich, da dies
eine Umsortierung erfordern würde, die in der Liste nicht vorgesehen und mit den üblichen Listenmethoden nicht vernünftig
möglich ist.
Beim Suchen und Löschen braucht nur das zum Sortierkriterium passende Attribut eingetippt werden - die anderen beiden Eingabefelder
können leer bleiben, da eventuelle Eingaben dort ohnehin ignoriert und gelöscht werden. Wurde z.B. eine Artikel-Liste mit absteigenden
Preisen gewählt, muss für Suchen oder Löschen ein Preis (etwa die Zahl 1.33) im letzten Feld eingetippt werden (bitte mit Punkt
statt Komma!). Bei Suchen wird dann der erste Artikel mit diesem Preis vollständig angezeigt - oder beim Löschen der erste Artikel mit
übereinstimmendem Preis gelöscht. Wurde hingegen beispielsweise eine nach der Länge des Vornamens sortierte Schüler-Liste
erzeugt, muss für Suchen und Löschen ein beliebiger Text in das Vornamen-Feld eingetippt werden. Nachname und Geschlecht bleiben leer
bzw. sind beliebig. In der Liste wird dann der erste Schüler mit einem Vornamen gleicher Länge gesucht (auch wenn der Vorname sonst ganz
anders ist) und entweder nur gezeigt oder gelöscht!
Für echte Anwendungen wäre es sicher wünschenswert, das Programm um die Möglichkeit des Weitersuchens (nach weiteren Elementen, die dem eingegebenen Attribut hinsichtlich des Sortierschlüssels entsprechen) zu ergänzen und das Löschen erst nach Anzeige eines gefundenen Elements und nach zusätzlicher Rückfrage/Bestätigung durchzuführen.
Achtung: Soll auch der andere Inhaltstyp getestet werden, muss das Programm neu gestartet werden. Bisher ist nicht vorgesehen, eine einmal
erzeugte Liste zu löschen (das geschieht nur automatisch beim Schließen des Programms) oder eine einmal erzeugte Liste zu
ersetzen.
Neben dieser parametrisierten sortierten Liste gibt es - wie bereits erwähnt - noch das ältere Applet für eine nicht-generische sortierte Liste auf einer älteren Sonderseite zum Vergleich!
Gezeigt werden alle sechs Java-Dateien bzw. Klassen. Interessant sind die Selbstbezüge bei den in spitzen Klammern übergebenen
Typparametern zu Beginn der ersten drei Klassen sowie die Parameterangabe mit extends bei P_SortListe. Die Oberfläche wurde
wieder mit dem im Javaeditor eingebauten GUI-Builder erzeugt und die dort bereitgestellten Methodenrahmen für die Schaltflächen mit
eigenem Programmtext gefüllt.
Hier alle Quelltexte:
Weiterhin wird die Datei public class Ls_Knoten <Elementtyp> (und darin/dafür noch public class Ls_Liste <ElTyp>) der einfachen Liste verwendet, wie sie auf der Sonderseite mit dem Ls_Listen-Applet angegeben ist.
// Parametrisiertes Interface für die Beispielelemente, verwendbar mit der "SortListe"
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
public interface P_MitOrdnung<ElTyp> // das Interface ist parametrisiert, weil..
{ // .. der ElTyp nachfolgend in vergleicheMit gebraucht wird!
public double vergleicheMit (ElTyp anderes, char sortKrit); // s. Kommentar in E_ObjektMitOrdnung
public String kontrollDarstellung(); // für Kontrollausgabe
}
// Beispielelement 2: Schüler zur Verwendung z.B. mit der "SortListe"
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
public class P_Schueler implements P_MitOrdnung<P_Schueler>
{
String vorname;
String nachname;
char geschlecht;
public P_Schueler (String vor, String nach, char geschl)
{
vorname = vor;
nachname = nach;
geschlecht = geschl;
}
public double vergleicheMit (P_Schueler anderer, char sortKrit) // für Ordnung nach ..
{
switch (sortKrit)
{
case 'n' : return (nachname.compareTo(anderer.nachname)); // .. Nachname
case 'v' : return (vorname.compareTo(anderer.vorname)); // .. Vorname
case 'g' : return ((""+geschlecht).compareTo(""+anderer.geschlecht)); // .. Geschlecht
case 'l' : return (vorname.length() - anderer.vorname.length()); //.. Vornamenlänge
} // end of switch
return (0);
}
public String kontrollDarstellung() // für Kontrollausgabe
{
return ("["+vorname+" "+nachname+" ("+geschlecht+")] ");
}
}
// Beispielelement 1: Supermarkt-Artikel zur Verwendung z.B. mit der "SortListe"
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
public class P_Artikel implements P_MitOrdnung<P_Artikel>
{
int ean;
String bezeichnung;
double preis;
public P_Artikel (int nr, String name, double vkPreis)
{
ean = nr;
bezeichnung = name;
preis = vkPreis;
}
public double vergleicheMit (P_Artikel anderer, char sortKrit) // für Ordnung nach ..
{
switch (sortKrit)
{
case 'e' : return (ean - anderer.ean); // .. EAN
case 'b' : return (bezeichnung.compareTo(anderer.bezeichnung)); // .. Bezeichnung
case 'p' : return (preis - anderer.preis); // .. Preis, aufsteigend
case 'P' : return (anderer.preis - preis); // .. Preis, absteigend
} // end of switch
return (0);
}
private String zahlwort (double zahl)
{
if (zahl >= 0)
{
return (""+zahl);
}
else
{
return ("_");
}
}
public String kontrollDarstellung() // für Kontrollausgabe
{
return ("["+zahlwort(ean)+" "+bezeichnung+" "+zahlwort(preis)+"€?] ");
}
}
// Parametrisierte "SortListe", die von P_MitOrdnung abgeleitete Elemente aufnehmen kann (ElmOTyp).
// Verwendet eine einfache, unsortierte Liste vom Typ Ls_Liste, die ihrerseits Ls_Knoten braucht.
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
public class P_SortListe <ElmOTyp extends P_MitOrdnung<ElmOTyp>>
// Die Elemente -- hier vom Typ ElmOTyp = Element-mit-Ordnung -- müssen das Interface
// P_MitOrdnung verwirklichen, d.h. tatsächlich über vergleicheMit verfügen.
// In der Parameter-Angabe steht immer nur extends statt implements;
// Bei der Ableitung eines Parameters von mehreren Interfaces und/oder (abstr.) Klassen
// wird & verwendet, z.B. <ElmO extends P_MitOrdnung & P_MitZeige, ZweiterPrameter>;
// Inzwischen ist am Ende der Kopfzeile durchaus >> statt früher nur > > möglich.
{
Ls_Liste<ElmOTyp> normaleListe;
char sortKrit;
public P_SortListe (char sortierKriterium) // Konstruktor:
{
normaleListe = new Ls_Liste<ElmOTyp>(); // erzeugt normale Liste als Speicher
sortKrit = sortierKriterium; // und legt einmalig das sortKrit fest
}
public void sortRein (ElmOTyp neuerInhalt) // neues Element an richtiger Stelle einfügen;
{ // "richtig" = für aufsteigende Reihenfolge
normaleListe.anDenAnfang(); // bzgl. des Sortierkriteriums sortKrit
while (!normaleListe.istHintermLetzten()
&& (normaleListe.zeige1().vergleicheMit(neuerInhalt, sortKrit) < 0))
{ // ^vergleicheMit -- hier wird das Interface P_MitOrdnung für ElmOTyp ausgenutzt
normaleListe.weiter();
} // end of while
normaleListe.rein(neuerInhalt);
}
public ElmOTyp zeigeGesucht (ElmOTyp gesucht)
{ // (erstes) Element finden und zurückgeben, das
normaleListe.anDenAnfang(); // mit gesucht bezüglich des Sortierkriteriums
while(!normaleListe.istHintermLetzten() // übereinstimmt
&& (normaleListe.zeige1()).vergleicheMit(gesucht, sortKrit)<0)
{
normaleListe.weiter();
}
if (!normaleListe.istHintermLetzten()
&& (normaleListe.zeige1()).vergleicheMit(gesucht, sortKrit)==0)
{
return (normaleListe.zeige1());
}
else
{
return (null);
}
}
public ElmOTyp löscheGesucht (ElmOTyp gesucht)
{ //(erstes) Element zurückgeben und löschen, das
normaleListe.anDenAnfang(); // mit gesucht bzgl. des Sortierkriteriums
while(!normaleListe.istHintermLetzten() // übereinstimmt
&& (normaleListe.zeige1()).vergleicheMit(gesucht, sortKrit)<0)
{
normaleListe.weiter();
}
if (!normaleListe.istHintermLetzten()
&& (normaleListe.zeige1()).vergleicheMit(gesucht, sortKrit)==0)
{
return (normaleListe.raus());
}
else
{
return (null);
}
}
//------------------ Folgendes gehört nicht zu den Standard-Listen-Operationen: ---
public String gesamtAusgabeZurKontrolle() // fürs Applet
{
int anz = 0;
String ausgabe = "Sortierte Liste { ";
Ls_Knoten<ElmOTyp> vorHilf = normaleListe.vorAnfang;
while (vorHilf != null)
{
if (vorHilf == normaleListe.vorAktuell)
{
ausgabe = ausgabe + "^"; // ^ markiert folgendes Element als aktuelles
} // end of if
if (vorHilf.zeiger != null)
{
ausgabe = ausgabe + vorHilf.zeiger.inhalt.kontrollDarstellung()+" ";
anz ++; // kontrollDarstellung lt. Interface P_MitOrdnung
} // end of if
vorHilf = vorHilf.zeiger;
}
ausgabe = ausgabe+"}\n - die Liste enthält "+anz+" Element(e).\n";
return (ausgabe);
}
}
// Oberfläche zum Test der parametrisierten "SortListe",
// die zur Laufzeit entweder für Elemente vom Typ P_Schueler oder für Elemente vom
// Typ P_Artikel eingerichtet werden kann. Außerdem wird die Ordnung festgelegt.
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
*
* Beschreibung Oberfläche zum Test der parametrisierten "SortListe"
*
* @version 1.5 vom 23.04.2015
* @author R. Krell (www.r-krell.de)
*/
public class P_Gui extends JFrame {
// Anfang Attribute
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
private JLabel jLabel3 = new JLabel();
private ButtonGroup buttonGroup1 = new ButtonGroup();
private JRadioButton jRadioButton1 = new JRadioButton();
private JRadioButton jRadioButton2 = new JRadioButton();
private JRadioButton jRadioButton3 = new JRadioButton();
private JRadioButton jRadioButton4 = new JRadioButton();
private JLabel jLabel4 = new JLabel();
private JRadioButton jRadioButton5 = new JRadioButton();
private JRadioButton jRadioButton6 = new JRadioButton();
private JRadioButton jRadioButton7 = new JRadioButton();
private JRadioButton jRadioButton8 = new JRadioButton();
private JButton jBtNeu = new JButton();
private JLabel jLabel5 = new JLabel();
private JLabel jLbEin1 = new JLabel();
private JTextField jTfEin1 = new JTextField();
private JLabel jLbEin2 = new JLabel();
private JTextField jTfEin2 = new JTextField();
private JLabel jLbEin3 = new JLabel();
private JTextField jTfEin3 = new JTextField();
private JLabel jLabel7 = new JLabel();
private JButton jBtRein = new JButton();
private JButton jBtSuch = new JButton();
private JButton jBtEntf = new JButton();
private JButton jBtKontrolle = new JButton();
private JTextArea jTaAusgabe = new JTextArea("");
private JScrollPane jTaAusgabeScrollPane = new JScrollPane(jTaAusgabe);
int typ = -1;
char sort = '-';
P_SortListe sListe = null;
P_Schueler suchSchüler = null;
P_Artikel suchArtikel = null;
// Ende Attribute
public P_Gui(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 909;
int frameHeight = 604;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
jLabel1.setBounds(288, 16, 395, 25);
jLabel1.setText("Demonstration einer (parametrisierten) sortierten Liste ");
jLabel1.setFont(new Font("Dialog", Font.PLAIN, 16));
jLabel1.setToolTipText("(C) R. Krell 2015, www.r-krell.de");
cp.add(jLabel1);
jLabel2.setBounds(8, 56, 83, 25);
jLabel2.setText("SortListe für");
cp.add(jLabel2);
jLabel3.setBounds(96, 56, 181, 25);
jLabel3.setText("- Schüler-Namen, sortiert nach:");
cp.add(jLabel3);
jRadioButton1.setBounds(288, 56, 100, 20);
jRadioButton1.setText("Nachname");
jRadioButton1.setOpaque(false);
buttonGroup1.add(jRadioButton1);
jRadioButton1.setToolTipText("Schüler-Liste, alphabetisch nach Nachnamen sortiert");
cp.add(jRadioButton1);
jRadioButton2.setBounds(400, 56, 100, 20);
jRadioButton2.setText("Vorname");
jRadioButton2.setOpaque(false);
buttonGroup1.add(jRadioButton2);
jRadioButton2.setToolTipText("Schüler-Liste, alphabetisch nach Vornamen sortiert");
cp.add(jRadioButton2);
jRadioButton3.setBounds(504, 56, 100, 20);
jRadioButton3.setText("Geschlecht");
jRadioButton3.setOpaque(false);
buttonGroup1.add(jRadioButton3);
jRadioButton3.setToolTipText("Schüler-Liste, nach Geschlecht (m oder w) sortiert");
cp.add(jRadioButton3);
jRadioButton4.setBounds(608, 56, 284, 20);
jRadioButton4.setText("Länge (Buchstabenzahl) des Vornamens");
jRadioButton4.setOpaque(false);
buttonGroup1.add(jRadioButton4);
jRadioButton4.setToolTipText("Schüler-Liste, kurze Vornamen zuerst");
cp.add(jRadioButton4);
jLabel4.setBounds(96, 88, 197, 19);
jLabel4.setText("- Supermarktartikel, sortiert nach:");
cp.add(jLabel4);
jRadioButton5.setBounds(304, 88, 172, 20);
jRadioButton5.setText("Artikelnummer (EAN)");
jRadioButton5.setOpaque(false);
buttonGroup1.add(jRadioButton5);
jRadioButton5.setToolTipText("Artikel-Liste, aufsteigend nach Nummer sortiert");
cp.add(jRadioButton5);
jRadioButton6.setBounds(464, 88, 100, 20);
jRadioButton6.setText("Bezeichnung");
jRadioButton6.setOpaque(false);
buttonGroup1.add(jRadioButton6);
jRadioButton6.setToolTipText("Artikel-Liste, alphabetisch nach Artikelnamen sortiert");
cp.add(jRadioButton6);
jRadioButton7.setBounds(584, 88, 145, 20);
jRadioButton7.setText("Preis, aufsteigend");
jRadioButton7.setOpaque(false);
buttonGroup1.add(jRadioButton7);
jRadioButton7.setToolTipText("Artikel-Liste, nach Preis sortiert (kleinster Preis zuerst) ");
cp.add(jRadioButton7);
jRadioButton8.setBounds(728, 88, 140, 20);
jRadioButton8.setText("Preis, absteigend");
jRadioButton8.setOpaque(false);
buttonGroup1.add(jRadioButton8);
jRadioButton8.setToolTipText("Artikel-Liste, absteigend nach Preis sortiert (höchster Preis zuerst)");
cp.add(jRadioButton8);
jBtNeu.setBounds(96, 128, 761, 25);
jBtNeu.setText("neue, leere SortListe anlegen (für ausgewählten Inhalt mit angegebener Sortierung)");
jBtNeu.setMargin(new Insets(2, 2, 2, 2));
jBtNeu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBtNeu_ActionPerformed(evt);
}
});
jBtNeu.setToolTipText("erst einen Elementtyp (Schüler oder Artikel) und ein Sortierkriterium wählen, dann drücken");
cp.add(jBtNeu);
jLabel5.setBounds(8, 184, 99, 25);
jLabel5.setText("Eingabe");
cp.add(jLabel5);
jLbEin1.setBounds(96, 184, 99, 25);
jLbEin1.setText("Eingabe1");
cp.add(jLbEin1);
jTfEin1.setBounds(176, 184, 129, 25);
jTfEin1.setToolTipText("Nachname oder ganzzahlige Artikelnummer eintippen");
cp.add(jTfEin1);
jLbEin2.setBounds(336, 184, 107, 25);
jLbEin2.setText("Eingabe2");
cp.add(jLbEin2);
jTfEin2.setBounds(416, 184, 145, 25);
jTfEin2.setToolTipText("Vorname oder Artikelbezeichnung (z.B. Milch oder Knäckebrot) eintippen");
cp.add(jTfEin2);
jLbEin3.setBounds(600, 184, 91, 25);
jLbEin3.setText("Eingabe3");
cp.add(jLbEin3);
jTfEin3.setBounds(688, 184, 153, 25);
jTfEin3.setToolTipText("Geschlecht (w oder m) bzw. Preis (z.B. 0.89 oder 10.50) eintippen");
cp.add(jTfEin3);
jLabel7.setBounds(8, 232, 114, 20);
jLabel7.setText("Wahl");
cp.add(jLabel7);
jBtRein.setBounds(96, 232, 145, 25);
jBtRein.setText("Element sortiert rein");
jBtRein.setMargin(new Insets(2, 2, 2, 2));
jBtRein.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBtRein_ActionPerformed(evt);
}
});
jBtRein.setToolTipText("alle drei Attribute eingeben und dadurch beschriebenes Element in Liste einfügen");
cp.add(jBtRein);
jBtSuch.setBounds(256, 232, 193, 25);
jBtSuch.setText("gesuchtes Element zeigen");
jBtSuch.setMargin(new Insets(2, 2, 2, 2));
jBtSuch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBtSuch_ActionPerformed(evt);
}
});
jBtSuch.setToolTipText("nur das eine Eingabefeld laut Sortierkriterium ausfüllen und passendes Element suchen");
cp.add(jBtSuch);
jBtEntf.setBounds(464, 232, 209, 25);
jBtEntf.setText("gesuchtes Element löschen");
jBtEntf.setMargin(new Insets(2, 2, 2, 2));
jBtEntf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBtEntf_ActionPerformed(evt);
}
});
jBtEntf.setToolTipText("nur das eine Eingabefeld laut Sortierkriterium ausfüllen und passendes Element löschen");
cp.add(jBtEntf);
jBtKontrolle.setBounds(712, 232, 161, 25);
jBtKontrolle.setText("gesamte Liste zeigen");
jBtKontrolle.setMargin(new Insets(2, 2, 2, 2));
jBtKontrolle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jBtKontrolle_ActionPerformed(evt);
}
});
jBtKontrolle.setToolTipText("komplette Liste zu Kontrollzwecken anzeigen ");
cp.add(jBtKontrolle);
jTaAusgabeScrollPane.setBounds(8, 272, 865, 265);
jTaAusgabe.setEditable(false);
jTaAusgabe.setToolTipText("Ausgabe bzw. Anzeige von Meldungen und Ergebnissen (je nach Knopfdruck)");
cp.add(jTaAusgabeScrollPane);
// Ende Komponenten
setVisible(true);
} // end of public P_Gui
// Anfang Methoden
// public static void main(String[] args) {
// new P_Gui("P_Gui");
// } end of main
public String buttonGroup1_getSelectedRadioButtonLabel() {
for (java.util.Enumeration<AbstractButton> e = buttonGroup1.getElements(); e.hasMoreElements();) {
AbstractButton b = e.nextElement();
if (b.isSelected()) return b.getText();
}
return "";
}
public void jBtNeu_ActionPerformed(ActionEvent evt) {
typ = -1;
sort = '-';
switch (buttonGroup1_getSelectedRadioButtonLabel())
{
case "Nachname" : typ = 0; sort = 'n'; break;
case "Vorname" : typ = 0; sort = 'v'; break;
case "Geschlecht" : typ = 0; sort = 'g'; break;
case "Länge (Buchstabenzahl) des Vornamens" : typ = 0; sort = 'l'; break;
case "Artikelnummer (EAN)" : typ = 1; sort = 'e'; break;
case "Bezeichnung" : typ = 1; sort = 'b'; break;
case "Preis, aufsteigend" : typ = 1; sort = 'p'; break;
case "Preis, absteigend" : typ = 1; sort = 'P'; break;
} // end of switch
switch (typ)
{
case 0 : sListe = new P_SortListe<P_Schueler>(sort);
jTaAusgabe.setText("Neue leere Liste für Schüler erzeugt; wird sortiert nach "
+buttonGroup1_getSelectedRadioButtonLabel()+"\n");
jLbEin1.setText("Vorname ");
jLbEin2.setText("Nachname");
jLbEin3.setText("Geschl. (m/w)");
break;
case 1 : sListe = new P_SortListe<P_Schueler>(sort);
jTaAusgabe.setText("Neue leere Liste für Artikel erzeugt; wird sortiert nach "
+buttonGroup1_getSelectedRadioButtonLabel()+"\n");
jLbEin1.setText("Art.-Nummer");
jLbEin2.setText("Bezeichnung");
jLbEin3.setText("Preis ");
break;
default: jTaAusgabe.append("* Fehler * Kein gültiger Elementtyp bzw. kein Sortierkriterium erkannt\n");
} // end of switch
} // end of jBtNeu_ActionPerformed
public void jBtRein_ActionPerformed(ActionEvent evt) {
String e1 = ""+jTfEin1.getText();
String e2 = ""+jTfEin2.getText();
String e3 = ""+jTfEin3.getText();
int nr = -1;
double geld = -1;
if (e1.equals("") || e2.equals("") || e3.equals(""))
{
jTaAusgabe.append("* Fehler * Bitte erst alle drei Eingabefelder für neuen Schüler oder Artikel ausfüllen!\n"); return;
} // end of if
if ((typ == 0) && !(jTfEin3.getText().equals("m") || jTfEin3.getText().equals("w")))
{
jTaAusgabe.append("* Fehler * Bitte gültiges Geschlecht (nur 'm' oder 'w') eingeben!\n"); return;
} // end of if
if (typ == 1)
{
try{
nr = Integer.parseInt(e1);
}
catch (NumberFormatException ex) { };
if (nr <= 0)
{
jTaAusgabe.append("* Fehler * Bitte positive ganzzahlige Artikelnummer eingeben\n"); return;
} // end of if
try{
geld = Double.parseDouble(e3);
}
catch (NumberFormatException ex) { };
if (geld <= 0)
{
jTaAusgabe.append("* Fehler * Bitte gültigen, positiven Preis (mit Punkt statt Komma) eingeben\n"); return;
} // end of if
} // end of if
switch (typ)
{
case 0: P_Schueler neuerSchüler = new P_Schueler (e1, e2, e3.charAt(0));
sListe.sortRein(neuerSchüler);
jTaAusgabe.append("Neuer Schüler "+neuerSchüler.kontrollDarstellung()+" passend eingefügt.\n");
return;
case 1: P_Artikel neueWare = new P_Artikel (nr, e2, geld);
sListe.sortRein(neueWare);
jTaAusgabe.append("Neuer Artikel "+neueWare.kontrollDarstellung()+" passend eingefügt.\n");
return;
} // end of switch
jTaAusgabe.append("* Fehler * rein fehlgeschlagen.\n");
} // end of jBtRein_ActionPerformed
private void suchAuswertung ()
{
String e1 = ""+jTfEin1.getText();
String e2 = ""+jTfEin2.getText();
String e3 = ""+jTfEin3.getText();
int nr = -1;
double geld = -1;
switch (sort)
{
case 'v' : ;
case 'l' : ;
case 'e' : e1 = jTfEin1.getText(); jTfEin2.setText(""); jTfEin3.setText("");
jTfEin1.requestFocus(); e2 = "_"; e3 = "_";
if (e1.equals("")) {
jTaAusgabe.append("* Fehler * gültige Eingabe im ersten Eingabefeld nötig!\n"); return;
}
if (sort == 'e')
{
try{
nr = Integer.parseInt(e1);
}
catch (NumberFormatException ex) { };
if (nr <= 0)
{
jTaAusgabe.append("* Fehler * Bitte positive ganzzahlige Artikelnummer eingeben\n"); return;
} // end of if
}
break;
case 'n' : ;
case 'b' : e2 = jTfEin2.getText(); jTfEin1.setText(""); jTfEin3.setText("");
jTfEin2.requestFocus(); e1 = "_"; e3 = "_";
if (e2.equals("")) {
jTaAusgabe.append("* Fehler * gültige Eingabe im zweiten Eingabefeld nötig!\n"); return;
}
break;
case 'g' : ;
case 'p' : ;
case 'P' : e3 = jTfEin3.getText(); jTfEin1.setText(""); jTfEin2.setText("");
jTfEin3.requestFocus(); e1 = "_"; e2 = "_";
if (e2.equals("")) {
jTaAusgabe.append("* Fehler * gültige Eingabe im dritten Eingabefeld nötig!\n"); return;
}
if ((sort == 'g') && !(e3.equals("m") || e3.equals("w")))
{
jTaAusgabe.append("* Fehler * Bitte gültiges Geschlecht (nur 'm' oder 'w') eingeben!\n"); return;
}
if (sort != 'g')
{
try{
geld = Double.parseDouble(e3);
}
catch (NumberFormatException ex) { };
if (geld <= 0)
{
jTaAusgabe.append("* Fehler * Bitte gültigen, positiven Preis (mit Punkt statt Komma) eingeben\n"); return;
} // end of if
}
break;
default: jTaAusgabe.append("* Fehler * Unerlaubte Eingabe beim Suchen oder Löschen!\n"); return;
} // end of switch
switch (typ)
{
case 0: suchSchüler = new P_Schueler (e1, e2, e3.charAt(0)); break;
case 1: suchArtikel = new P_Artikel (nr, e2, geld); break;
} // end of switch
} // end of suchAuswertung
public void jBtSuch_ActionPerformed(ActionEvent evt) {
suchSchüler = null;
suchArtikel = null;
suchAuswertung();
if ((typ==0) && suchSchüler != null)
{
P_Schueler gefunden = (P_Schueler)sListe.zeigeGesucht(suchSchüler);
if (gefunden == null)
{
jTaAusgabe.append("Kein Schüler passend zu "+suchSchüler.kontrollDarstellung() +" gefunden!\n");
return;
} // end of if
jTaAusgabe.append("Erster Fund: "+gefunden.kontrollDarstellung()
+" (passend zur Eingabe "+suchSchüler.kontrollDarstellung() +") -- Weitersuchen noch nicht implementiert\n"); return;
} // end of if
if ((typ==1) && suchArtikel != null)
{
P_Artikel gefunden = (P_Artikel)sListe.zeigeGesucht(suchArtikel);
if (gefunden == null)
{
jTaAusgabe.append("Kein Artikel passend zu "+suchArtikel.kontrollDarstellung() +" gefunden!\n");
return;
} // end of if
jTaAusgabe.append("Erster Fund: "+gefunden.kontrollDarstellung()
+" (passend zur Eingabe "+suchArtikel.kontrollDarstellung() +") -- Weitersuchen noch nicht implementiert\n"); return;
} // end of if
jTaAusgabe.append("* Fehler * Probleme beim Suchen!\n");
} // end of jBtSuch_ActionPerformed
public void jBtEntf_ActionPerformed(ActionEvent evt) {
suchSchüler = null;
suchArtikel = null;
suchAuswertung();
if ((typ==0) && suchSchüler != null)
{
P_Schueler gefunden = (P_Schueler)sListe.löscheGesucht(suchSchüler);
if (gefunden == null)
{
jTaAusgabe.append("Nichts gelöscht, da kein Schüler passend zu "+suchSchüler.kontrollDarstellung() +" gefunden\n");
return;
} // end of if
jTaAusgabe.append("Gelöscht wurde: "+gefunden.kontrollDarstellung()
+" (passend zur Eingabe "+suchSchüler.kontrollDarstellung() +")\n"); return;
} // end of if
if ((typ==1) && suchArtikel != null)
{
P_Artikel gefunden = (P_Artikel)sListe.löscheGesucht(suchArtikel);
if (gefunden == null)
{
jTaAusgabe.append("Nichts gelöscht, da kein Artikel passend zu "+suchArtikel.kontrollDarstellung() +" gefunden\n");
return;
} // end of if
jTaAusgabe.append("Gelöscht wurde: "+gefunden.kontrollDarstellung()
+" (passend zur Eingabe "+suchArtikel.kontrollDarstellung() +")\n"); return;
} // end of if
jTaAusgabe.append("* Fehler * Probleme beim Löschen!\n");
} // end of jBtEntf_ActionPerformed
public void jBtKontrolle_ActionPerformed(ActionEvent evt) {
jTaAusgabe.append(sListe.gesamtAusgabeZurKontrolle());
} // end of jBtKontrolle_ActionPerformed
// Ende Methoden
} // end of class P_Gui
// Startdatei zum Start der Oberfläche zum Testen der parametrisierte "SortListe"
// R. Krell (www.r-krell.de), 23.4.2015 -- für IF Q1 M
import javax.swing.JApplet;
public class P_Start extends JApplet
{
public void init() // Start als Applet bzw. ..
{
new P_Gui ("parametrisierte SortListe (www.r-krell.de) als Applet");
}
public static void main (String[] s) //.. als Application
{
new P_Gui ("parametrisierte SortListe (www.r-krell.de) als Application");
}
}
zurück zur Seite „Informatik mit Java, Teil e)"