Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1. Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1

Größe: px
Ab Seite anzeigen:

Download "Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1. Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1"

Transkript

1 Inhalt 1. Swing Komponenten 1. Klassenhierarchie 2. Beteiligte Packages 3. Schachtelungs-Hierarchie 4. Swing-Applikation als Klasse 2. Basis Komponente 1. JComponent 3. Text Komponenten 1. JLabel 2. JTextField 3. JTextArea Folie 1 4. Button Komponenten 1. JButton 2. JCheckBox 3. JRadioButton 5. Auswahl Komponenten 1. JList 2. JComboBox 6. Bewegliche Komponenten 1. JScrollBar 2. JSlider 3. JProgressBar Folie Diego Schmidlin Seite 1

2 Lernziele Sie wissen, wie man Graphische User-Interfaces mit Swing erzeugt Sie kennen die grundlegenden Komponenten von Swing und deren Einsatzmöglichkeit Sie kennen die beweglichen Elemente unter Swing JScrollBar JSlider und können diese richtig einsetzen Sie sind in der Lage Fortschritts-Anzeigen mit JProgressBar zu verwirklichen Folie 3 Folie Diego Schmidlin Seite 2

3 1.1 Klassenhierarchie Swing Komponenten Object Component Container Panel Applet Color Font JComponent JApplet JTextComponent JPanel JComboBox JLabel JTextField JTextArea AbstractButton JList JMenuBar JPane JCheckBox JToggleButton JButton JMenuItem JRadioButton JPopupMenu JScrollbar JScrollPane JTable JRadioButtonMenuItem JCheckBoxMenuItem JMenu JTree Folie Beteiligte Packages Package: java.lang Klassen: Object Package: java.awt Klassen: Component, Container, Panel Color, Font Package: java.applet Klassen: Applet Package: javax.swing Klassen: Restliche Klassen und KlasseJApplet Folie Diego Schmidlin Seite 3

4 1.3 Schachtelungs-Hierarchie (1) Top-Level-Container JFrame, JDialog, JApplet Die Wurzel der Containment-Hierachie Intermediate-Container JPanel, JScrollPane, JTabbedPane Platziert aufcontentpane Leightweight-Komponenten JLabel, JButton Alle Komponenten in dercontentpane Folie Schachtelungs-Hierarchie (2) JFrame Top-Level Container Content Pane Border-Layout JPanel JButton Intermediate Container JLabel Lightweight Komponenten Folie Diego Schmidlin Seite 4

5 1.4 Swing-Applikation als Klasse (1) import javax.swing.*; // Package für Swing import java.awt.*; // AWT wird häufig benötigt import java.awt.event.*; // Wichtig für Nachrichtenverarbeitung public class SwingApplication private static int numclicks = 0; public static void main(string[ ] args) // siehe nächste Seite // class SwingApplication Folie Swing-Applikation als Klasse (2) public static void main(string[ ] args) // Top-level Container JFrame frame = new JFrame("Swing[ing] Application"); // Intermediate Container JPanel pane = new JPanel(); // Leightwight Components JButton button = new JButton("Count button clicks"); JLabel label = new JLabel(labelPrefix + "0 "); //... hinzufügen pane.add(button); pane.add(label); frame.getcontentpane().add(panel); // Platzbedarf ermitteln und anzeigen frame.pack(); frame.setvisible(true); // main( ) Folie Diego Schmidlin Seite 5

6 2.1 JComponent (1) Alle Swing-Komponenten, deren Name mit Präfix anfängt, erben von der Klasse JComponent z.b.jpanel, JScrollPane, JButton Ausnahme: Top-Level Container JComponent ist Unterklasse von Container Erbt wiederum von Component Component stellt Basis-Funktionalität zur Verfügung Layout, Zeichnen und Event-Handling Folie JComponent (2) Container erweitert Component mit Fähigkeit, Komponenten hinzuzufügen und zu platzieren JComponent erweitert Container: settooltiptext() zeigt Hilfetext wenn der Cursor über Komponente ist setborder() zeichnet Begrenzungslinie um die Komponente registerkeyboardaction() ermöglicht Steuerung des GUI über die Tastatur Folie Diego Schmidlin Seite 6

7 2.1 JComponent (3) JComponent Operationen Neu definierte sowie von Component / Container geerbte Anpassen von Komponenten-Aussehen setborder(), getborder() (JComponent) setforeground(), getfont() (Component) usw. Ändern des Komponentenzustandes settooltiptext() (JComponent) setcursor(), getcursor(), setvisible() (Component) usw. Containment-Hierarchie add(), remove(), getparent() (Component) getrootpane() (JComponent) usw. Folie JComponent (4) JComponent Operationen (Fortsetzung) Zeichnen der Komponenten repaint(), revalidate() (JComponent) Layout der Komponenten setpreferredsize(), setmaximumsize() (JComponent) getpreferredsize(), getmaximumsize() (Component) setlayout(layoutmanager), getlayout() (Container) usw. Lesen von Grösse- und Positionsangaben getwidth(), getheight(), getsize(), getx(), gety() getbounds(), getlocation() (Component) usw. Definition von Grösse und Position setlocation(), setsize(), setbounds() (Component) usw. Folie Diego Schmidlin Seite 7

8 3.1 JLabel (1) JLabel Einfaches Feld für die Darstellung eines Textes Normaler Texte einzeilig HTML Text mehrzeilig Kann auch Bilder anzeigen der Klasse Icon Konstruktoren public JLabel(String text) public JLabel(Icon image) public JLabel(String text, Icon icon, int horizontalalignment) Folie JLabel (2) import java.awt.*; import javax.swing.*; public class JLabelDemo extends JFrame public JLabelDemo() super("jlabel"); Container cp = getcontentpane(); cp.setlayout(new GridLayout(2, 1)); JLabel label; public static void main(string[] args) JLabelDemo frame = new JLabelDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 100); frame.setvisible(true); //Standardlabel label = new JLabel("Standard-Label"); cp.add(label); //Label mit Icon label = new JLabel( "Label mit Icon", new ImageIcon("lock.gif"), JLabel.CENTER ); label.sethorizontaltextposition(jlabel.left); cp.add(label); Folie Diego Schmidlin Seite 8

9 3.2 JTextField (1) JTextField Einzeiliges Feld für Tastatur-Eingaben Konstruktoren public JTextField(int columns) public JTextField(String text) public JTextField(String text, int columns) Folie JTextField (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class JTextFieldDemo extends JFrame implements ActionListener, CaretListener public JTextFieldDemo() super("jtextfield"); Container cp = getcontentpane(); cp.setlayout(new FlowLayout()); JTextField tf; //Linksbündiges Textfeld mit "Hello, world" tf = new JTextField("Hello, world"); cp.add(tf); //Leeres Textfeld mit 15 Spalten tf = new JTextField(15); cp.add(tf); //Textfeld mit "Hello, world" und 15 Spalten tf = new JTextField("Hello, world", 15); tf.addactionlistener(this); tf.addcaretlistener(this); cp.add(tf); public void actionperformed(actionevent event) JTextField tf = (JTextField)event.getSource(); System.out.println("---ActionEvent---"); System.out.println(tf.getText()); System.out.println(tf.getSelectedText()); System.out.println(tf.getSelectionStart()); System.out.println(tf.getSelectionEnd()); System.out.println(tf.getCaretPosition()); public void caretupdate(caretevent event) System.out.println("---CaretEvent---"); System.out.println(event.getDot()); System.out.println(event.getMark()); public static void main(string[] args) JTextFieldDemo frame = new JTextFieldDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 120); frame.setvisible(true); Folie Diego Schmidlin Seite 9

10 3.3 JTextArea (1) JTextArea Mehrzeiliges Feld für Tastatur-Eingaben Konstruktoren public JTextArea(String text) public JTextArea(int rows, int columns) public JTextArea(String text, int rows, int columns) Folie JTextArea (2) import java.awt.*; import javax.swing.*; public class JTextAreaDemo extends JFrame public JTextAreaDemo() super("jtextarea"); Container cp = getcontentpane(); JTextArea ta = new JTextArea("Hello, world", 20, 30); ta.settabsize(4); ta.setlinewrap(true); ta.setwrapstyleword(true); cp.add(new JScrollPane(ta)); public static void main(string[] args) JTextAreaDemo frame = new JTextAreaDemo(); frame.setdefaultcloseoperation(jframe.exit_on_ CLOSE); frame.setlocation(100, 100); frame.setsize(200, 100); frame.setvisible(true); Folie Diego Schmidlin Seite 10

11 4.1 JButton (1) JButton Schaltfläche mit Text Kann mit der Maus angeklickt werden Sollte immer eine Aktion auslösen Kann auch Bilder anzeigen der Klasse Icon Konstruktoren public JButton(String text) public JButton(Icon icon) public JButton(String text, Icon icon) Folie JButton (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JButtonDemo2 extends JFrame implements ActionListener public JButtonDemo2() super("jbutton"); Container cp = getcontentpane(); cp.setlayout(new FlowLayout()); JPanel panel = new JPanel(); //OK-Button JButton okbutton = new JButton("OK"); okbutton.addactionlistener(this); panel.add(okbutton); //Abbrechen-Button JButton cancelbutton = new JButton("Abbrechen"); cancelbutton.addactionlistener(this); panel.add(cancelbutton); //Hilfe-Button JButton helpbutton = new JButton("Hilfe"); helpbutton.setmnemonic('h'); helpbutton.addactionlistener(this); panel.add(helpbutton); //Panel hinzufügen cp.add(panel); public void actionperformed(actionevent event) System.out.println(event.getActionCommand()); public static void main(string[] args) JButtonDemo2 frame = new JButtonDemo2(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(300, 100); frame.setvisible(true); Folie Diego Schmidlin Seite 11

12 4.2 JCheckBox (1) JCheckBox Schalter mit Beschriftung Kann ein- oder ausgeschaltet werden Konstruktoren public JCheckBox(String text) public JCheckBox(String text, boolean selected) Folie JCheckbox (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class JCheckboxDemo extends JFrame implements ItemListener public JCheckboxDemo() super("jcheckbox"); JPanel panel = new JPanel(); panel.setlayout(new GridLayout(3, 1)); for (int i = 1; i <= 3; ++i) JCheckBox cb = new JCheckBox("Checkbox" + i, i == 2); cb.additemlistener(this); panel.add(cb); getcontentpane().add(panel, "Center"); public void itemstatechanged(itemevent e) JCheckBox cb = (JCheckBox)e.getSource(); int change = e.getstatechange(); if (change == ItemEvent.SELECTED) System.out.println(cb.getText() + ": SELECTED"); else if (change == ItemEvent.DESELECTED) System.out.println(cb.getText() + ": DESELECTED"); public static void main(string[] args) JCheckboxDemo frame = new JCheckboxDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 100); frame.setvisible(true); Folie Diego Schmidlin Seite 12

13 4.3 JRadioButton (1) JRadioButton Schalter mit Beschriftung Kann ein- oder ausgeschaltet werden Nur eine Selektion auf einmal möglich Konstruktoren public JRadioButton(String text) public JRadioButton(String text, boolean selected) Folie JRadioButton (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JRadioButtonDemo extends JFrame implements ActionListener private ButtonGroup group = new ButtonGroup(); public JRadioButtonDemo() super("jradiobutton"); //RadioButton-Panel JPanel panel = new JPanel(); panel.setlayout(new GridLayout(3, 1)); for (int i = 1; i <= 3; ++i) JRadioButton rb = new JRadioButton( "RadioButton" + i, i == 2); rb.setactioncommand(rb.gettext()); panel.add(rb); group.add(rb); getcontentpane().add(panel, "Center"); //Selektion-Button JButton button = new JButton("Selektion"); button.addactionlistener(this); getcontentpane().add(button, "South"); public void actionperformed(actionevent event) String cmd = event.getactioncommand(); if (cmd.equals("selektion")) ButtonModel selected = group.getselection(); System.out.print("Selektiert: "); if (selected!= null) System.out.println( selected.getactioncommand()); public static void main(string[] args) JRadioButtonDemo frame = new JRadioButtonDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 100); frame.setvisible(true); Folie Diego Schmidlin Seite 13

14 5.1 JList (1) JList Auswahl-Liste mit Texten Ein oder mehrere Einträge können gewählt werden Konstruktoren public JList() public JList(Object[] listdata) public JList(Vector listdata) public JList(ListModel datamodel) Folie JList (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JListDemo extends JFrame implements ActionListener static final String[] DATA = "Hund", "Katze", "Meerschweinchen", "Tiger", "Maus","Fisch", "Leopard", "Schimpanse", "Kuh", "Pferd", "Reh", "Huhn", "Marder", "Adler", "Nilpferd" ; private JList list; public JListDemo() super("jlist"); Container cp = getcontentpane(); //Liste list = new JList(DATA); list.setselectionmode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION ); list.setselectedindex(2); cp.add(new JScrollPane(list), "Center"); JButton button = new JButton("Ausgabe"); button.addactionlistener(this); cp.add(button, "South"); public void actionperformed(actionevent event) String cmd = event.getactioncommand(); if (cmd.equals("ausgabe")) ListModel lm = list.getmodel(); int[] sel = list.getselectedindices(); for (int i = 0; i < sel.length; ++i) String value = (String)lm.getElementAt(sel[i]); System.out.println(" " + value); public static void main(string[] args) JListDemo frame = new JListDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 200); frame.setvisible(true); Folie Diego Schmidlin Seite 14

15 5.2 JComboBox (1) JComboBox Drop-down Liste mit Texten Erlaubt grundsätzlich nur einfache Selektion Konstruktoren public JComboBox(Object[] items) public JComboBox(Vector items) public JComboBox(ComboBoxModel amodel) Folie JComboBox (2) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComboBoxDemo extends JFrame private static final String[] COLORS = "rot", "grün", "blau", "gelb" ; public JComboBoxDemo() super("jcombobox"); Container cp = getcontentpane(); public static void main(string[] args) JComboBoxDemo frame = new JComboBoxDemo(); frame.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); frame.setlocation(100, 100); frame.setsize(200, 100); frame.setvisible(true); for (int i = 1; i <= 2; ++i) JPanel panel = new JPanel(); panel.setlayout(new FlowLayout(FlowLayout.LEFT, 10, 2)); panel.add(new JLabel("Farbe " + i + ":")); JComboBox combo = new JComboBox(COLORS); combo.seteditable(i == 1); panel.add(combo); cp.add(panel, i == 1? "North" : "Center"); Folie Diego Schmidlin Seite 15

16 6.1 JScrollBar (1) JScrollBar Schieberegler, mit dem ein Wert kontinuierlich innerhalb vorgegebener Grenzen eingestellt werden kann Konstruktor public JScrollBar(int orientation, int value, int extent, int min, int max) min value extent max Folie JScrollBar (2) Methoden min value extent max Methode int getminimum() void setminimum(int minimum) int getmaximum() void setmaximum(int maximum) int getvisibleamount() void setvisibleamount(int extent) int getvalue() void setvalue(int value) int getunitincrement() void setunitincrement(int unitincrement) int getblockincrement() void setblockincrement(int blockincrement) Beschreibung Gibt den minimalen Wert zurück (meistens 0) Setzt den minimalen Wert Gibt den maximalen Wert zurück Setzt den maximalen Wert Gibt die Grösse des Schiebers zurück (extent) Setzt die Grösse des Schiebers (extent) Gibt den Wert an der aktuelle Position zurück Setzt den Wert für die aktuelle Position Gibt Einzel-Schrittweite zurück Setzt Einzel-Schrittweite Gibt Block-Schrittweite zurück (PgUp/PgDown) Setzt Block-Schrittweite (PgUp/PgDown) Folie Diego Schmidlin Seite 16

17 6.1 JScrollBar (3) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JScrollBarDemo extends JFrame implements AdjustmentListener private JPanel coloredpanel; private JScrollBar sbeast; private JScrollBar sbsouth; private int blue = 0; private int red = 0; public JScrollBarDemo() super("jscrollbar"); Container cp = getcontentpane(); //Vertikaler Schieberegler sbeast = new JScrollBar(JScrollBar.VERTICAL, 0, 10, 0, 255); sbeast.addadjustmentlistener(this); cp.add(sbeast, "East"); //Horizontaler Schieberegler sbsouth = new JScrollBar(JScrollBar.HORIZONTAL, 0, 10, 0, 255); sbsouth.addadjustmentlistener(this); cp.add(sbsouth, "South"); //Farbiges Panel coloredpanel = new JPanel(); coloredpanel.setbackground(new Color(red, 0, blue)); cp.add(coloredpanel, "Center"); Folie JScrollBar (4) public void adjustmentvaluechanged(adjustmentevent event) JScrollBar sb = (JScrollBar)event.getSource(); if (sb == sbeast) blue = event.getvalue(); else red = event.getvalue(); coloredpanel.setbackground(new Color(red, 0, blue)); if (!sb.getvalueisadjusting()) System.out.println("(" + red + ",0," + blue + ")"); public static void main(string[] args) JScrollBarDemo frame = new JScrollBarDemo(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlocation(100, 100); frame.setsize(200, 200); frame.setvisible(true); Folie Diego Schmidlin Seite 17

18 6.2 JSlider (1) JSlider Schieberegler, mit Anzeigeskala Schiebergrösse ist immer 1 Konstruktor public JScrollBar(int orientation, int min, int max, int value) min value max Folie JSlider (2) Methoden min value max Methode int getminimum() Beschreibung Gibt den minimalen Wert zurück (meistens 0) void setminimum(int minimum) Setzt den minimalen Wert int getmaximum() Gibt den maximalen Wert zurück void setmaximum(int maximum) Setzt den maximalen Wert int getvalue() Gibt den Wert an der aktuelle Position zurück void setvalue(int value) Setzt den Wert für die aktuelle Position int getmajortickspacing() void setmajortickspacing(int n) Gibt Abstand der grossen Markierungen zurück Setzt Abstand der grossen Markierungen int getminortickspacing() Gibt Abstand der kleinen Markierungen zurück void setminortickspacing(int n) Setzt Abstand der kleinen Markierungen void setpaintticks(boolean b) Ticks anzuzeigen void setpaintlabels(boolean b) Labels anzuzeigen void setsnaptoticks(boolean b) Schieber rastet auf Markierungen ein Folie Diego Schmidlin Seite 18

19 6.2 JSlider (3) import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.*; public class JSliderDemo extends JFrame implements ChangeListener private JPanel coloredpanel; private JSlider sleast; private JSlider slsouth; private int blue = 0; private int red = 0; public JSliderDemo() super("jslider"); Container cp = getcontentpane(); //Vertikaler Schieberegler sleast = new JSlider(JSlider.VERTICAL, 0, 255, 0); sleast.setmajortickspacing(50); sleast.setminortickspacing(10); sleast.setpaintticks(true); sleast.setpaintlabels(true); sleast.setsnaptoticks(true); sleast.addchangelistener(this); cp.add(sleast, "East"); Folie JSlider (4) //Horizontaler Schieberegler slsouth = new JSlider(JSlider.HORIZONTAL, 0, 255, 0); slsouth.setmajortickspacing(100); slsouth.setminortickspacing(25); slsouth.setpaintticks(true); slsouth.setpaintlabels(true); slsouth.setsnaptoticks(true); slsouth.addchangelistener(this); cp.add(slsouth, "South"); //Farbiges Panel coloredpanel = new JPanel(); coloredpanel.setbackground(new Color(red, 0, blue)); cp.add(coloredpanel, "Center"); public void statechanged(changeevent event) JSlider sl = (JSlider)event.getSource(); if (sl == sleast) blue = sl.getvalue(); else red = sl.getvalue(); coloredpanel.setbackground(new Color(red, 0, blue)); if (!sl.getvalueisadjusting()) System.out.println("(" + red + ",0," + blue + ")"); public static void main(string[] args) JSliderDemo frame = new JSliderDemo(); frame.setdefaultcloseoperation(jframe.exit_on _CLOSE); frame.setlocation(100, 100); frame.setsize(300, 250); frame.setvisible(true); Folie Diego Schmidlin Seite 19

20 6.3 JProgressBar (1) JProgressBar Fortschrittsanzeige Konstruktoren public JProgressBar(int orient) public JProgressBar(int min, int max) public JProgressBar(int orient, int min, int max)) min value max Folie JProgressBar (2) Methoden min value max Methode int getvalue() Beschreibung Gibt den Wert an der aktuelle Position zurück void setvalue(int value) Setzt den Wert für die aktuelle Position void setstringpainted(boolean b) Zeigt Text mit prozentualem Fortschritt an Folie Diego Schmidlin Seite 20

21 6.3 JProgressBar (3) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JProgressBarDemo extends JFrame implements ActionListener private JProgressBar pb; private int value = 0; public JProgressBarDemo() super("jprogressbar"); Container cp = getcontentpane(); //Fortschrittsanzeige pb = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100); pb.setstringpainted(true); cp.add(pb, "North"); //Weiter-Button JButton button = new JButton("Weiter"); button.addactionlistener(this); cp.add(button, "South"); Folie JProgressBar (4) public void actionperformed(actionevent event) value = (value >= 100? 0 : value + 5); pb.setvalue(value); public static void main(string[] args) JProgressBarDemo frame = new JProgressBarDemo(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlocation(100, 100); frame.setsize(300, 150); frame.setvisible(true); Folie Diego Schmidlin Seite 21

22 Zusammenfassung JComponent ist die Oberklasse für alle GUI- Komponenten in Swing Komponenten werden mit der Methode add() zu einer Pane hinzugefügt In Swing können viele Komponenten zusätzlich zu einem Beschriftungs-Text auch Grafiken aufnehmen Als beweglichen Elemente für die Dateneingabe stellt Swing die Komponenten JScrollBar und JSlider zur Verfügung Fortschritts-Anzeigen können mit JProgressBar verwirklicht werden Folie 43 Folie Diego Schmidlin Seite 22

23 @ Übungsaufgabe U02.1 Gegeben ist der Source-Code zu den Beispielen aus der Vorlesung Kommentieren Sie den Source-Code nach Ihren Bedürfnissen Testen und spielen Sie mit einzelnen Beispiel Untersuchen Sie, wie auf Ereignisse in den Beispielen reagiert wird actionperformed() caretupdate() itemstatechanged() adjustmentvaluechanged() statechanged() Folie 45 Folie Diego Schmidlin Seite 23

24 @ Übungsaufgabe U02.2 (1) Address Manager In dieser Programmieraufgabe geht es um eine einfache Adress-Verwaltung. Diese könnte z.b. so aussehen: KlasseAddress: Adressen KlasseAddressDB: "DBMS" für Adressen KlasseAddressManager: Anwendungsprogramm Folie Übungsaufgabe U02.2 (2) Entwickeln Sie vorerst folgende Version: Benutzeroberfläche mit Swing Komponenten Address Adress-Item: Name, Address, City, Postcode AddressDB Verwaltet mehrere Instanzen von Address Adressen unsortiert abgelegt basierend auf einem Array, kein dauerhaftes Abspeichern möglich Suchfunktion noch nicht implementiert AddressManager Swing-Applikation Folie Diego Schmidlin Seite 24