Ausgewählte Implementierungsprobleme



Ähnliche Dokumente
Objektorientierte Software-Entwicklung

Swing Lernen am Code Teil 1

GUI Programmierung mit JAVA Swing

Einstieg in die Informatik mit Java

Java I Vorlesung 11 Graphische Oberflächen mit Swing

GUI Programmierung in Java

Objektorientierte Programmierung

GRAFISCHE BENUTZERSCHNITTSTELLEN

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Programmieren mit Swing

Grundlagen der Programmierung APPLETS

GUI Programmierung mit javax.swing

Swing Grundlagen. Andre Eichmann

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

NTB Druckdatum:

Graphische Benutzungsoberflächen

Java GUI Entwicklung mit Swing

Objektorientierte Softwareentwicklung

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

...erinnern Sie sich? oopjs4b / kwhbkd4r

Einführung in GUI-Programmierung. javax.swing

Swing :Komponenten I (Teil 2)

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Javakurs für Fortgeschrittene

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

Institut für Informatik

Einführung in GUI-Programmierung. javax.swing

Kap. 36. SWING: Menüs. und weitere SWING-Container. Seán Dempsey

Objektorientiertes Programmieren. Übungsblatt 5

Grafische Benutzeroberflächen mit Swing

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

tentoinfinity Apps 1.0 EINFÜHRUNG

11. GUI-Programmierung mit SWING Überblick

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Benutzeroberflächen. Java Teil 4

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Einführung: Grafische Benutzeroberflächen. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22

JAVA Oberflächen mit Swing

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

Vorlesung Informatik II

Schieberegler und analoge Anzeigen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

GUI-Programmierung in Java

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

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

Outlook 2000 Thema - Archivierung

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Nach der Anmeldung im Backend Bereich landen Sie im Kontrollzentrum, welches so aussieht:

Liste Programmieren Java Überblick

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Programmiertechnik GUI Programmierung mit Java Swing

Ein Manager mit CardLayout layout/cards.java

Java Projekt: Tic Tac Toe + GUI

Tipps und Tricks zu Netop Vision und Vision Pro

Ihr CMS für die eigene Facebook Page - 1

2A Basistechniken: Weitere Aufgaben

Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung

Mensch-Maschine-Interaktion

AWT. Einfache AWT-Anwendung. Swing. Vorlesung 1. Handout S. 2. import java. awt. * ;

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Installation / Aktualisierung von Druckertreibern unter Windows 7

Swing. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Programmieren in Java

Grafische Benutzeroberflächen

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

Java Design und Event Handling. Natascha Hoebel Professur Prof. R. V. Zicari. AWT SWING Layout Design Event Handling

Argelander Institut für Astronomie. Persönliche Website

1. fe.logon. 1.1 Konfigurationsprogramm SetLogonParams

Swing : Komponeneten I (Teil 1) Was ist Swing?

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Bauteilattribute als Sachdaten anzeigen

5.2 Neue Projekte erstellen

Grafische Benutzeroberfläche mit Glade und Python

import java.awt.*; import java.awt.event.*; import javax.swing.*;

ecaros2 - Accountmanager

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

Transkript:

Ausgewählte Implementierungsprobleme Rebecca Tiarks 15. Januar 2009 1 / 56

Inhaltsverzeichnis 1 2 / 56

AWT grafische Benutzeroberfläche (GUI) erste API von Sun AWT bietet GUI-Komponenten, Operationen zum Zeichnen und zur Ereignisbehandlung. sehr einfach gehalten 3 / 56

Peer-Klassen jede grafische Komponente wird auf darunterliegende Komponente der Plattform abgebildet Peer-Klassen Schaltfläche leitet Visualisierung und Interaktion an eine Peer-Klasse auf der Betriebssystemseite weiter. dadurch sollen Theoretisch alle AWT-Anwendungen dem look and feel der Plattform entsprechen plattformunabhängige Bibliothek für grafische Oberflächen schwer umsetzbar unterschiedliches Verhalten von Benutzerschnittstellen auf den Plattformen (Menüs, Scrollbars, etc.) 4 / 56

Vor- und Nachteile AWT Oberfläche verhält sich so wie erwartet entspricht optisch den nativen Programmen der Plattform Programme zeigen merkwürdige Seiteneffekte durch Unabhängigkeit nur wenige Widgets verfügbar für modernere, anspruchsvollere grafische Oberflächen ungeeignet heavyweight components beziehen Ressourcen von der nativen Plattform 5 / 56

JFC Netscape entwickelte Erweiterungen Internet Foundation Classes IFC 1997 einigten sich IBM Netscape und Sun auf eine GUI-Bibliothek die auf die IFC aufbaut Java Foundation Classes JFC 6 / 56

JFC Bestandteile -GUI-Komponenten mit vielen neuen grafischen Elementen ist kein Ersatz - benutzt Teile aus der AWT-Architektur (Frame JFrame) Pluggable Look and Feel Aussehen der Komponenten kann zur Laufzeit geändert werden Java 2D-API ermöglicht komplexere Objekte zu bilden Drag n Drop ermöglicht Datenübertragung zwischen Applikationen Unterstützung für Menschen mit Behinderungen 7 / 56

Eigenschaften mehr Komponenten Labels auf den Schaltflächen Komponenten können transparent und geformt sein und einen Rahmen haben -Methoden sind nicht Thread-sicher. Parallelität kann probleme erzeugen 9 / 56

Einen Frame erzeugen JFrame abgeleitet von der AWT-Klasse Frame Paket javax.swing Fenster (Toplevel-Container) erzeugen (Fenster ist in keinem anderen enthalten) Fensterdekorationen ( Titel, Buttons etc. ) werden vom Fenstersystem beeinflusst und nicht von 11 / 56

Beispiel JFrame hat eine default Größe von 0 x 0 Pixeln setdefaultcloseoperation() gibt Verhalten beim Schließen des Fensters an (Applikation beenden oder Fenster in den Hintergrund) erst setvisible(true) macht Fenster sichtbar dadurch können vorher Komponenten hinzugefügt werden 12 / 56

Beispiel package examples ; import javax. swing. JFrame ; public class JFrameTest { public static void main ( String [] args ) { JFrame frame = new JFrame ( " Hello World " ); frame. setdefaultcloseoperation ( JFrame. EXIT_ ON_ CLOSE ); frame. setsize ( 300, 100 ); frame. setvisible ( true ); } } 13 / 56

Positionierung von Frames setlocation und setbounds setzen Position seticoniamge setz das Icon in der Taskleiste etc. settitle Titel des Fensters setresizeable Größe veränderbar? mit der Klasse Toolkit abstrahiert von system- und bildschirmabhängigen Implementierungen, für jede Plattform eine Implementierung (WToolkit Windows ermöglicht Herausfinden der Bildschirmgröße etc. 14 / 56

Struktur von JFrame JFrame besitzt nur einen Container JRootPane dieser verwaltet eine Layered-Pane die ein Menü und die Content-Pane aufnimmt Glass-Pane als Glasscheibe über allen Komponenten der Container von JFrame der die Komponenten aufnimmt heisst Content-Pane Komponenten werden mit der Funktion add() hinzugefügt da der JFrame mehrere Container verwaltet musste man vor Java 5 zurerst den Content-Pane erfragen: Container cont = frame. getcontentpane (); cont. add ( component ); 15 / 56

atomare Komponenten Komponenten die direkt angezeigt werden und selber kein Container sind atomare Komponenten JLabel javax.swing.jlabel wird mit add() hinzugefügt JLabel löst keine Events aus ist aber Component und reagiert z.b. auf MausOperationen 17 / 56

Beispiel public class JLabelTest { public static void main ( String [] args ) { JFrame frame = new JFrame (); frame. setdefaultcloseoperation ( JFrame. EXIT_ ON_ CLOSE ); } } JLabel label = new JLabel ( " neues Label " ); label. setforeground ( Color. MAGENTA ); frame. add ( label ); frame. pack (); frame. setvisible ( true ); 18 / 56

Events ausgesendete Botschaften werden in Ereignisklassen eingeteilt Ereignisse sind Objekte die aus einer Unterklasse von AWTEvent gebildet sind AWTEvent befindet sich direkt in java.awt Ereignissklassen selber in java.awt.event jede Ereignisklasse besitzt eine ID die mit getid() erfragt werden kann 19 / 56

Event-Listener es existieren Ereignis-Auslöser wie Schaltflächen es gibt eine Reihe von Interessenten die informiert werden wollen Interessent ist nur an bestimmten Ereignissen interessiert muss sich bei der Ereignisquelle anmelden für jedes Ereignis gibt es einen eigenen Listener, an den das Ereignis weitergeleitet wird z.b. ActionListener, MouseListener 21 / 56

class WithoutAdapter extends JFrame implements WindowListener { public void windowclosing ( WindowEvent event ) { System. exit ( 0 ); } public void windowclosed ( WindowEvent event ) { } public void windowdeiconified ( WindowEvent event ) { } public void windowiconified ( WindowEvent event ) { } public void windowactivated ( WindowEvent event ) { } public void windowdeactivated ( WindowEvent event ) { } public void windowopened ( WindowEvent event ) { } } WithoutAdapter (){ setsize ( 400, 400 ); addwindowlistener ( this ); setvisible ( true ); } public static void main ( String [] args ) { new WithoutAdapter (); }

Listener hinzufügen addereignis Listener removeereignis Listener für Fenster z.b. addwindowlistener Adapterklassen für Listener (nicht mehr jede Methode muss implementiert werden) Adapterklasse für Schnittstelle WindowListener heisst WindowAdapter man überschreibt nur noch die Methode die man braucht 23 / 56

Listener mit Adapterklasse public class WithAdapter { public static void main ( String [] args ) { JFrame frame = new JFrame (); frame. setsize ( 400, 400 ); frame. setvisible ( true ); } } frame. addwindowlistener ( new CloseWindowAction () ); class CloseWindowAction extends WindowAdapter { public void windowclosing ( WindowEvent e ) { System. exit (0); } } 24 / 56

Listener mit innerer anonymer Klasse public class Inner extends JFrame { public Inner () { setsize ( 100, 100 ); addwindowlistener ( new WindowAdapter () { public void windowclosing ( WindowEvent e ) { System. exit ( 0 ); } } ); } } public static void main ( String [] args ) { new Inner (). setvisible ( true ); } 25 / 56

Schaltflächen Schaltflächen oder Buttons ermöglichen Interaktion JButton reagiert auf Aktivierung und erzeugt ein ActionEvent das ein ActionListener meldet JButton leitet von der Oberklasse AbstractButton ab ebenso JToggleButton und JMenuItem gemeinsame Eigenschaften: Selbstauslösung doclick(), Icons setdisabledicon(icon), setpressedicon(icon) etc. Ausrichtung von Text und Position von Text und Icons 26 / 56

Beispiel public class JButtonTest { public static void main ( String [] args ) { JFrame frame = new JFrame (); frame. setdefaultcloseoperation ( JFrame. EXIT_ ON_ CLOSE ); final Icon icon1 = new ImageIcon ( JButtonTest. class. getr final JButton testbutton = new JButton ( icon1 ); frame. add ( testbutton ); } } frame. pack (); frame. setvisible ( true ); 27 / 56

Actions eine Aktion löst ein Event aus - mehrere Möglichkeiten (Shortcut, Menu etc.) javax.swing.action Unterschiedliche Aktionen definierbar Unterklassen von AbstractAction nutzen und ActionPerformed() überschreiben Action exitaction = new AbstractAction ( " Quit " ) { public void actionperformed ( ActionEvent e ) { System. exit ( 0 ); } }; JButton but = new JButton ( exitaction ); frame. add ( but ); 28 / 56

Component und JComponent Component ist die Basisklasse der Komponenten JComponent ist erweiterte Klasse allerdings leitet sie nicht direkt ab sondern erst von Container und dann jede JComponent ist auch ein Container JComponent bietet viele Funktionen für Tooltips, Rahmen, Tastaturbedienung 29 / 56

Component und JComponent Events Component Container JComponent ComponentEvent FocusEvent KeyEvent MouseEvent InputMethodEvent HierachyEvent PropertyChangedEvent ContainerEvent PropertyChangeEvent AncestorEvent 30 / 56

Component-Listener ComponentListener ist Basisklasse für alle Komponenten die Ereignisse empfangen componenthide( ComponentEvent e ) Komponente wurde versteckt componentmoved( ComponentEvent e ) Komponente wurde bewegt componentresized( ComponentEvent e ) Größe der Komponente wurde verändert componentshown( ComponentEvent e ) Komponente wurde angezeigt Tastaturbedienung 32 / 56

Container Komponenten müssen auf einem Container platziert werden Container nehmen Kinder auf und verwalten diese JPanel ist im JComponent mit der Möglichkeit die Kinder anzuordnen JScrollPane Komponente mit Scrollbalken JTabbedPane mit Reitern JSplitPane Darstellung von zwei Komponenten Tastaturbedienung 33 / 56

Beispiel public class Tab { public static void main ( String [] args ) { JFrame frame = new JFrame (); frame. setdefaultcloseoperation ( JFrame. EXIT_ ON_ CLOSE ); JTabbedPane tab = new JTabbedPane (); tab. addtab ( " Tab 1", new JButton (" Tab 1") ); tab. addtab ( " Tab 2", new JTextArea () ); } } frame. add ( tab ); frame. pack (); frame. setvisible ( true ); 36 / 56

Rollbalken JScrollBar durch verschieben eines Knopfes lässt sich ein Wert auswählen wählt ganzzahligen Wert aus vorher definierten Werten aus bei vertikalem Balken liegt der größte Wert oben bei horizontalen links die wichtigsten Werte sind Orientierung (vertikal, horizontal), Minimal-, Maximalwert, aktueller Wert für Events muss AdjustmentListener implementiert werden adjustmentvaluechanged( AdjustmentEvent e ) wird vom Rollbalken aufgerufen 37 / 56

Schieberegler JScrollBar ähnlich wie Rollbalken Auswahl eines Wertes zusätzlich kann die Skala durch Striche dargestellt werden die ticks können auch automatisch nummeriert werden auf Events hört der ChangeListener 38 / 56

Layout Manager ein Layout Manager ordnet die Elemente eines Containers Container fragt bei der Darstellung den Layoutmanager wie die Elemente dargstellt werden sollen Layoutmanager in Java: FlowLayout von links nach rechts BoxLayou horizontal oder vertikal GridLayout Raster mit gleichgroßen Elementen BorderLayout in vier Himmelsrichtungen oder Mitte GridBagLayout Erweiterung von GridLayout CardLayout verwaltet Komponenten wie einen Stapel (nur eine sichtbar) SpringLayout Berücksichtigt Kanten von Komponenten GroupLayout der Layout-Manager wird einem Container mit setlayout (LayoutManager) zugewiesen 39 / 56

Border Layout Box Layout FlowLayout

Kontrollfelder Kontrollfeler haben einen Zustand an oder aus JCheckBox kann mit Grafiken den Zustand darstellen auf Events hört der ItemListener mit getstate() und setstate() kann Zustand erfragt bzw. geändert werden 41 / 56

public static void main ( String [] args ) { JFrame frame = new JFrame ( " Frame " ); frame. setdefaultcloseoperation ( JFrame. EXIT_ ON_ CLOSE ); Icon unchecked = new ImageIcon ( Check. class. getresource ( Icon checked = new ImageIcon ( Check. class. getresource ( JCheckBox box = new JCheckBox ( " Checkbox ", true ); box. seticon ( unchecked ); box. setselectedicon ( checked ); frame. add ( box, BorderLayout. PAGE_ START ); } ItemListener boxlistener = new ItemListener () { public void itemstatechanged ( ItemEvent e ) { System. out. print ( (( JCheckBox ) e. getitem ()). gettext ( } }; box. additemlistener ( boxlistener ); frame. pack (); frame. setvisible ( true );

Fortschrittsbalken JProgressBar zeigt das Vorankommen (oder Nichtvorankommen) einer Anwendung die wichtigsten Werte sind Orientierung (vertikal, horizontal), Minimal-, Maximalwert, aktueller Wert setvalue(int n) setz den Wert 43 / 56

Menüs Fenstermenüs und Popup-Menüs sind immer mit einem Fenster verbunden Menübalken nimmt Menüeinträge auf sitzt auf einem Toplevel-Container außerhalb der Content-Pane Menüeintrage lösen Aktionen aus und können weitere Einträge enthalten (Untermenü) 44 / 56

Menüs JMenu JMenuBar() erzeugt einen neuen Menübalken setjmenubar(jmenubar menubar) weist Menü einem JFrame zu JMenu(String s) erzeugt ein neues Menü JMenu add(jmenu c) fügt neue Menüzeile JMenuBar menubar = new JMenuBar (); JMenu filemenu = new JMenu ( " Datei " ); menubar. add ( filemenu ); f. setjmenubar ( menubar ); 45 / 56

Menüeinträge JMenuItem add() fügt die vertikalen Elemente vom Typ JMenuItem hinzu JMenuItem JMenu als Unterklasse für Untermenüs addseparator() fügt Trennlinie ein Menüeinträge lassen sich mit Action-Objekten belegen JMenu helpmenu = new JMenu ( " Hilfe " ); menubar. add ( helpmenu ); helpmenu. add ( new JMenuItem (" Programm ") ); 46 / 56

Popup-Menüs haben keine feste Position meistens auf Rechtsklick des Benutzers aktiviert (Kontextmenü) JPopupMenu analog wie JMenu zum Öffnen auf Mausereignis hören und show() aufrufen 47 / 56

Texteingabefelder vershiedene Möglichkeiten in JTextField einzeiliges Eingabefeld JFormattedTextField einzeiliges Textfeld mit Formatierungsvorgaben JPasswordField verdeckte Eingabe JTextArea mehrzeilig JEditorPane Editor JTextPane spezieller Editor alle von JTextComponent abgeleitet wichtige Methoden settext(string) und gettext() 48 / 56

Formatiertes Eingabefeld JFormattedTextField ftf1 = new JFormattedTextField ( new SimpleDateFormat ("MM/dd/yy") ); 49 / 56

Tabellen JTable zweidimensionale Tabellen bei Bedarf auch eigenes Tabellenmodell als Eingabe ein zweidimensionales Feld String [][] data = { {"A", "B" }, {"U", "V"} }; JTable table = new JTable ( data ); 50 / 56

Tabellen-Modell Trennung von Daten und Anzeige Daten werden durch die Schnittstelle TableModel um auf die Daten einer Tabelle zugreifen zu können braucht man das Modell auch eigenes Modell möglich das mit setmodel(tablemodel) gesetzt werden kann 51 / 56

Dialoge und Windows JFrame Fenster mit Dekoration java.awt.window nicht Swing-Unterklasse JWindow Dialoge java.awt.dialog und JDialog Dialoge können modal oder nicht-modal sein (bei modal Rest solange gesperrt bis Nutzer reagiert) Meldedialoge, Eingabedialoge, Bestätigungsdialoge etc. mit JOptionPane können einfach durch entsprechenden Aufruf verwendet werde showxxxdialog() 52 / 56

JOptionPane. showinputdialog ( " Bitte Name eingeben " ); JOptionPane. showconfirmdialog ( null, " Alles OK?" ); JOptionPane. showmessagedialog ( null, " Message " ); String [] optionen = { "Ja", " Nein ", " Abbrechen " }; int n = JOptionPane. showoptiondialog ( null, "Ja oder Nein?", // Fragetext "Ja/ Nein / Abbrechen ", // Titel JOptionPane. YES_ NO_ CANCEL_ OPTION, JOptionPane. QUESTION_ MESSAGE, // Icon null, optionen, optionen [0] ); if ( n == JOptionPane. YES_ OPTION ) System. out. println ("Ja");

Dateiauswahl JFileChooser zur Auswahl von Dateien und Verzeichnissen ist modal und kann fürs Öffnen oder fürs Speichern konfiguriert sein erst nach Schließen mit der OK Schaltfläche können die Datein verwendet werden Filtern nach bestimmten Dateien ist möglich Erzeugen mit JFileChooser() ausgewählte Datei oder Verzeichnis abfragbar durch getselectedfile() und getdirectory() FileFilter muss die Methoden accept() und getdescription() implementieren 54 / 56

Nebenläufgkeit Ereignisse gelangen in eine Ereigniswarteschlange event queue jedes Fenster hat eine eigene Event-Queue AWT-Event-Thread läuft parallel und arbeitet die Ereignisse ab führt auch den Prorgammcode in den Listenern aus dauert die Abarbeiten in dem Handler lange steht das Programm Swing ist nicht Thread-sicher bei konkurrierenden Zugriffen gibts eine Exception deshalb Methoden zur um die Aufträge in den AWT-Thread einzureihen invokelater(runnable) und invokeandwait(runnable) 55 / 56

Christian Ullenboom. Java ist auch eine Insel. Galileo Computing, 7 edition, 2008. ISBN 978-3-8362-1146-8. 56 / 56