Java Lab 2006/12/13 Client Prof. Dr. Bernhard Humm Version: 1.0 Date: 2006/12/06 Darmstadt University of Applied Sciences Department of Computer Science Schöfferstr. 8b 64295 Darmstadt Germany
1 Einleitung In diesem Praktikum soll für jeden Use Case, den Sie entwickelt haben, ein Dialog erstellt werden. Die Aufgaben werden beispielhaft am Use Case BookManagement und dem dazugehörigen Dialog erläutert. 2 Package Erstellen Sie ein Package unter de.h_da.library.gui mit dem Namen Ihres Use Case, zum Beispiel de.h_da.library.gui.bookmanagement. Alle Klassen sollen in diesem Package abgelegt werden. 3 Frame-Klasse Erstellen Sie eine Frame-Klasse für Ihren Use Case, zum Beispiel BookManagementFrame extends LibraryFrame initial leer. Hinweis: LibraryFrame im Package de.h_da.library.gui ist abgeleitet von javax.swing.jframe. cd gui Client Management Dialogs LibraryFrame # controller: LibraryController - libraryapplication: LibraryApplication JFrame + getcontroller() : LibraryController + getlibraryapplication() : LibraryApplication + LibraryFrame(String, LibraryApplication) bookmanagement::bookmanagementframe - layoutframe() : void Skizzieren Sie den fertigen Dialog und überlegen Sie sich passende GUI-Elemente und deren Namen. Page: 1
cd bookmanagement LibraryFrame BookManagementFrame ~ addbookbutton: JButton ~ authorslabel: JLabel ~ authorstextfield: JTextField ~ bookpanel: JPanel ~ cancelbutton: JButton ~ categorylabel: JLabel ~ categorytextfield: JTextField ~ commandpanel: JPanel ~ idlabel: JLabel ~ idtextfield: JTextField ~ isbnlabel: JLabel ~ isbntextfield: JTextField ~ messagetextfield: JTextField ~ numberofbooksonstocklabel: JLabel ~ numberofbooksonstocktextfield: JTextField ~ titlelabel: JLabel ~ titletextfield: JTextField ~ yearlabel: JLabel ~ yeartextfield: JTextField Legen Sie für jedes GUI-Element eine Instanzvariable an Lassen Sie get-methoden generieren. 4 layoutframe Entwickeln Sie die Methode private void layoutframe(): Instanziieren Sie die GUI-Elemente (Components) und weisen Sie diese den entsprechenden Instanzvariablen zu Instanziieren Sie entsprechende Container (zum Beispiel Panels), wählen Sie passende LayoutManager. Orientieren Sie sich dabei an den CalculatorFrame aus dem letzten Praktikum. Fügen Sie die Components den Containern hinzu. Rufen Sie pack() auf 5 Konstruktor für Frame Implementieren Sie einen Default-Konstruktor, zum Beispiel BookManagementFrame(): Rufen Sie den super-konstruktor LibraryFrame(String title) auf und übergeben Sie den Titel Ihres Dialogs Rufen Sie layoutframe auf Page: 2
Tipp: Orientieren Sie sich an der Implementierung von UseCase1Frame (im Package de.hda.library.gui.usecase1). 6 Controller Implementieren Sie eine Controller-Klasse für Ihren Dialog, zum Beispiel BookManagement- Controller extends LibraryController initial leer. Legen Sie eine Instanzvariable für den zu verwendenden Use Case an, zum Beispiel private BookManagementRemote bookmanagement; Hinweis: LibraryController (definiert im Package de.h_da.library.gui) implementiert das Interface java.awt.event.actionlistener) cd controller LibraryController ~ frame: LibraryFrame ~ libraryapplication: LibraryApplication ActionListener + getframe() : LibraryFrame + getlibraryapplication() : LibraryApplication + LibraryController(LibraryFrame, LibraryApplication) bookmanagement::bookmanagementcontroller - bookmanagement: BookManagement + actionperformed(actionevent) : void + BookManagementController(BookManagementFrame, LibraryApplication) + getframe() : BookManagementFrame 7 Konstruktor für Controller, Aufruf in Frame Entwickeln Sie einen Konstruktor für Ihre Controller Klasse, zum Beispiel BookManagementController(BookManagementFrame frame): Rufen Sie den super-konstruktor LibraryController(LibraryFrame frame) auf. Initialisieren Sie die Variable für den Use Case Proxy durch einen Aufruf des Name Servers. Dafür ist eine Variable namingcontext in LibraryController definiert. Tipp: Orientieren Sie sich an der Implementierung von UseCase1Controller Erweitern Sie nun den Konstruktor der Frame-Klasse aus Aufgabe 5: Instanziieren Sie den entsprechenden Controller mittels des neu entwickelten Konstruktors Legen Sie die Instanz in der Instanzvariable controller ab (deklariert in LibraryFrame) Tipp: Orientieren Sie sich an der Implementierung von UseCase1Frame Page: 3
8 actionperformed Implementieren Sie nun die Instanzethode public void actionperformed(actionevent e) der Controller-Klasse: Führen Sie eine Fallunterscheidung nach e.getactioncommand() durch. Typischerweise werden die folgenden Schritte durchgeführt: Instanziierung eines volatilen Entitäts-Objekts (Transferobjekt), zum Beispiel Book Auslesen von Werten aus dem Frame und Speicherung im Entitäts-Objekt Aufruf einer UseCase Methode Rückschreiben des Ergebnisses in den Frame Tipp: Orientieren Sie sich an der Implementierung in UseCase1Controller 9 Test Testen Sie Ihren Dialog. Legen Sie dazu eine main-methode an (zum Beispiel in Ihrer Frame Klasse): Instanziieren Sie Ihre Frame-Klasse Rufen Sie frame.setvisible(true) auf Überprüfen Sie, ob alle Eingaben erwartungskonform in die Datenbank gelangen. Page: 4