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

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

Grafische Benutzeroberflächen

Grafische Benutzeroberflächen

Objektorientierte Software-Entwicklung

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

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

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Javakurs für Fortgeschrittene

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

GRAFISCHE BENUTZERSCHNITTSTELLEN

Kapitel 15. Systemarchitektur

GUI Programmierung mit JAVA Swing

Funktionale und Objekt-Orientierte Programmierkonzepte

Kapitel 7: Ereignis-basierte Kommunikation

Objektorientierte Programmierung

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

Kapitel 14. Systemarchitektur

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

NTB Druckdatum:

Ist eine Softwarekomponente, die dem Benutzer eines Computers die Interaktion mit der Maschine über grafische Symbole erlaubt

Heute. Grafische Benutzeroberflächen (Anonyme) innere Klassen Einfache Simulationen main / ausführbare jar-files IT I - VO 11 1

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Javakurs für Fortgeschrittene

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

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

Programmieren II. Events (Ereignisse) Heusch 16.6 (2. Bd) Ratz 15. Institut für Angewandte Informatik

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Grafische Benutzeroberflächen mit Swing

Java für Computerlinguisten

Benutzeroberflächen. Java Teil 4

Ereignisse (Events) in Java

5. Java Swing Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

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

7. Architektur interaktiver Systeme

Institut für Informatik

Grundlagen der Programmierung APPLETS

Graphical User Interfaces

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Einführung in Swing. Graphical User Interface

Medientechnik. Übung 2 Java Swing

...erinnern Sie sich? oopjs4b / kwhbkd4r

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

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

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

Computergrafik 2016 Oliver Vornberger. Kapitel 02: Grafische Benutzeroberflächen

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Einige vorgefertigte Layout-Manager:

Universität Paderborn Prof. Dr. Stefan Böttcher. Kapitel 3: Java Applets

GUI Programmierung mit javax.swing

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

Kapitel 6. Vererbung

Probeklausur: Programmierung WS04/05

GUI-Programmierung in Java

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

Wiederholung: Objektorientierte Oberflächen-Programmierung mit Java und Swing

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Objektorientierte Programmierung Studiengang Medieninformatik

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

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

3-schichtige Informationssystem-Architektur

Java GUI Entwicklung mit Swing

Seite Architektur interaktiver Systeme. 7. Architektur interaktiver Systeme. 7.1 Entkopplung durch Sichten. Schichtenarchitektur

Liste Programmieren Java Überblick

11. GUI-Programmierung mit SWING Überblick

Einführung in die Programmierung für NF. Vererbung

7. Architektur interaktiver Systeme

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Java Lab 2006/12/13 Client

Vorlesung Programmieren

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

DHBW Karlsruhe, Angewandte Informatik Programmieren in JAVA W. Geiger, T. Schlachter, C. Schmitt, W.

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Objektorientierte Programmierung Studiengang Medieninformatik

Geschrieben von: Sonntag, den 18. September 2005 um 20:01 Uhr - Aktualisiert Donnerstag, den 01. Oktober 2009 um 23:39 Uhr

GUI-Programmierung mit Java. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 11: GUI 1: AWT (1) GUI-Programmierung mit Java.

GroupLayout Anmerkung

Probeklausur Informatik 2 Sommersemester 2013

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Swing :Komponenten I (Teil 2)

Programmieren 2 Selbststudium Semesterwoche 4

Vorlesung Programmieren. Bisher... Apple Lisa Office System 3.1. GUIs mit Java

Nachholklausur (6 ECTS): Lösungsvorschlag Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname...

Layout Manager. Astrid Beck FHT Esslingen

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

jcontentpane.setlayout(new BorderLayout()); // unten JPanel unten = new JPanel(); unten.setlayout( new BoxLayout(unten, BoxLayout.

Programmieren II. Die Klasse JList. Vorlesung 5. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester JList.

public class Beispiel1 extends Frame {

2. Programmierung von Benutzungsschnittstellen

GUI Programmierung in Java

Einführung in die Programmierung Blockkurs Java

13 Grafische Oberflächen , Prof. Dr. D. Ratz

04 - Actions. Actions

Swing Lernen am Code Teil 1

Softwarepraktikum: Enigma

Transkript:

Kapitel 7 Grafische Benutzeroberflächen Grafische Benutzeroberflächen 1

Ziele Grafische Benutzeroberflächen (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen. Erstellung individueller GUI-Klassen durch Erweiterung existierender Klassen der Java Bibliotheken AWT und Swing. Die Vorgehensweise zur Erstellung einer GUI verstehen und durchführen können: 1. Erstellung des strukturellen Aufbaus der GUI, 2. Verbindung der Ansicht (GUI) mit den inhaltlichen Objekten der Anwendung (Modell), 3. Ereignisgesteuerte Behandlung von Benutzereingaben (z.b. Knopfdruck). Grafische Benutzeroberflächen 2

AWT und Swing AWT und Swing bieten eine Klassenbibliothek zur Programmierung grafischer Benutzerschnittstellen (GUIs) für Java-Programme. Java 1.0 wurde 1996 mit dem Abstract Window Toolkit (AWT) veröffentlicht. In Java 1.2 wurde 1998 eine verbesserte Bibliothek namens Swing eingeführt. Swing baut auf AWT auf (es werden Klassen aus dem AWT benutzt). Typische Import-Deklarationen in einem Programm, das AWT/Swing benutzt: import java.awt.*; import javax.swing.*; Grafische Benutzeroberflächen 3

Beispiel Wir wollen eine einfache grafische Anwendung für Bankkonten erstellen: Grafische Benutzeroberflächen 4

Fenster Die Klasse JFrame stellt ein leeres Fenster zur Verfügung. JFrame BankKontoGUI +void settitle(string s) +void setsize(int width, int height) +void setvisible(boolean b) +Container getcontentpane()... Wir können das Fenster durch Subklassenbildung spezialisieren und benutzen: import java.awt.*; import javax.swing.*; public class BankKontoGUI extends JFrame { public BankKontoGUI() { this.settitle("bankkonto"); this.setsize(300, 200); public class Main { public static void main(string[] args) { BankKontoGUI gui = new BankKontoGUI(); gui.setvisible(true); Grafische Benutzeroberflächen 5

GUI-Elemente In Swing gibt es viele Klassen für die verschiedenen Interaktionselemente. Textaufschriften, Knöpfe, Textfelder für Ein/Ausgabe usw. werden durch Objekte der Klassen JLabel, JButton, JTextField usw. repräsentiert. Beispiel: JLabel JTextField JButton JButton Grafische Benutzeroberflächen 6

Anlegen von Instanzvariablen (Attributen) für die GUI-Elemente import java.awt.*; import javax.swing.*; public class BankKontoGUI extends JFrame { private JTextField kontostandfield; private JTextField betragfield; private JButton einzahlenbutton; private JButton abhebenbutton; public BankKontoGUI() { this.settitle("bankkonto"); this.setsize(300, 200); /* Initialisierung der Attribute */ this.kontostandfield = new JTextField("123.0", 10); this.kontostandfield.seteditable(false); this.betragfield = new JTextField(10); this.einzahlenbutton = new JButton("Einzahlen"); this.abhebenbutton = new JButton("Abheben"); BankKontoGUI -JTextField kontostandfield -JTextField betragfield -JButton einzahlenbutton -JButton abhebenbutton +BankKontoGUI() JFrame Grafische Benutzeroberflächen 7

Strukturierung von Fenster-Inhalten Der Hintergrund eines JFrame-Fensters ist ein Container-Objekt; zugreifbar durch die Methode getcontentpane(). Der Inhalt des Fensters ist darin als ein Baum von Objekten organisiert. Für die Gruppierung verwenden wir Objekte der Klasse JPanel. Container JPanel JPanel JPanel JLabel JTextField JLabel JTextField JButton JButton Grafische Benutzeroberflächen 8

Aufbau der Baumstruktur und Setzen des Layouts public BankKontoGUI() { // Initialisierung der Attribute wie vorher JPanel kontostandpanel = new JPanel(); //lokale Var. kontostandpanel.add(new JLabel("Kontostand:")); kontostandpanel.add(this.kontostandfield); JPanel betragpanel = new JPanel(); //lokale Variable betragpanel.add(new JLabel("Betrag:")); betragpanel.add(this.betragfield); JPanel buttonpanel = new JPanel(); //lokale Variable buttonpanel.add(this.einzahlenbutton); buttonpanel.add(this.abhebenbutton); Container contentpane = this.getcontentpane(); contentpane.setlayout(new GridLayout(3,1)); //Grid mit 3 Zeilen und 1 Spalte contentpane.add(kontostandpanel); contentpane.add(betragpanel); contentpane.add(buttonpanel); Container +void add(component c) +void setlayout(layoutmanager m) JFrame BankKontoGUI -JTextField kontostandfield -JTextField betragfield -JButton einzahlenbutton -JButton abhebenbutton +BankKontoGUI() JPanel +Container getcontentpane() Grafische Benutzeroberflächen 9

Einige LayoutManager FlowLayout setlayout(new FlowLayout()); Standard bei JPanel. 1 2 3 4 5 6 GridLayout 1 2 3 setlayout(new GridLayout(2,3)); 4 5 6 BorderLayout setlayout(new BorderLayout()); Standard für den durch getcontentpane() gelieferten Container in JFrame. EAST NORTH CENTER WEST Einfügen an bestimmten Positionen, z.b. add(component, BorderLayout.SOUTH); SOUTH Grafische Benutzeroberflächen 10

Ansicht und Modell Bisher haben wir nur die Ansicht der Kontodaten implementiert. Wir brauchen noch die eigentlichen Daten, welche die GUI anzeigt, in unserem Beispiel ein Bankkonto. Man spricht von dem Modell. Wir benutzen die uns bekannte Klasse BankKonto. Ansicht und Modell sollen entkoppelt sein, denn: Modell existiert unabhängig von der Ansicht. Häufig gibt es verschiedene Ansichten für dasselbe Modell, z.b. GUI-Interface und Web-Interface. Getrennte Entwicklung von Modell und Ansicht unterstützt die Wartbarkeit. Grafische Benutzeroberflächen 11

Ansicht und Modell im Beispiel Ansicht: Klasse BankKontoGUI, Modell: Klasse BankKonto, Ansicht-Objekte erhalten eine Referenz auf das anzuzeigende Modell. public class BankKontoGUI extends JFrame { private JTextField kontostandfield; private JTextField betragfield; private JButton einzahlenbutton; private JButton abhebenbutton; /* Referenz auf das Modell */ private BankKonto konto; public BankKontoGUI() { this.konto = new BankKonto(123.0); this.settitle("bankkonto"); this.setsize(300, 200); this.kontostandfield = new JTextField(10); JFrame BankKontoGUI -JTextField kontostandfield -JTextField betragfield -JButton einzahlenbutton -JButton abhebenbutton -BankKonto konto +BankKontoGUI() this.kontostandfield.settext(double.tostring(this.konto.getkontostand())); this.kontostandfield.seteditable(false);... //Initialisierung der anderen Attribute, Baumstruktur, Layout wie vorher Grafische Benutzeroberflächen 12

Ereignisse und ihre Behandlung In grafischen Anwendungen kann eine Vielzahl verschiedener Ereignisse auftreten, z.b. Tastatur betätigen, Maus klicken, Fenster verschieben, vergrößern, verkleinern, schließen, In AWT/Swing werden verschiedene Ereignisklassen unterschieden: ActionEvent, WindowEvent, KeyEvent, MouseEvent, Ist eine Komponente (z.b. ein JFrame) an Ereignissen eines bestimmten Typs (z.b. ActionEvent) interessiert und möchte darauf reagieren, dann muss sie: 1. sich bei der Komponente, bei der ein solches Ereignis auftreten kann (z.b. ein JButton) als Listener registrieren (z.b. Aufruf der Methode addactionlistener), 2. die beim Eintritt eines solchen Ereignisses von der Java-Laufzeitumgebung aufgerufene Operation (z.b. actionperformed) des passenden Listener- Interfaces implementieren (z.b. implements ActionListener), indem sie 3. die Reaktionen auf Ereignisse festlegt. Grafische Benutzeroberflächen 13

Ereignisbehandlung im Beispiel (UML-Darstellung) ActionListener JFrame +void actionperformed(actionevent e) BankKontoGUI -JTextField kontostandfield -JTextField betragfield -JButton einzahlenbutton -JButton abhebenbutton -BankKonto konto +BankKontoGUI() +void actionperformed(actionevent e) BankKonto -double kontostand +BankKonto(double anfangsbetrag) +double getkontostand() +void einzahlen(double x) +void abheben(double x) Grafische Benutzeroberflächen 14

Ereignisbehandlung im Beispiel (Java-Programm) public class BankKontoGUI extends JFrame implements ActionListener { private JTextField kontostandfield; private JTextField betragfield; private JButton einzahlenbutton; private JButton abhebenbutton; /* Referenz auf das Modell: */ private BankKonto konto; public BankKontoGUI() { this.konto = new BankKonto(123.0); this.settitle("bankkonto"); this.setsize(300, 200);... //Initialisierung der Attribute, Baumstruktur und Layout wie vorher /* Registrierung der BankKontoGUI als Listener bei den Buttons */ this.einzahlenbutton.addactionlistener(this); this.abhebenbutton.addactionlistener(this); /* Für ordnungsgemäße Beendigung der Anwendung bei Schließen (X) des Fensters */ this.setdefaultcloseoperation(jframe.exit_on_close); //Fortsetzung -> Grafische Benutzeroberflächen 15

Implementierung der Methode actionperformed public void actionperformed(actionevent e) { Object source = e.getsource(); if (source == this.einzahlenbutton) { double betrag = Double.parseDouble(this.betragField.getText()); this.konto.einzahlen(betrag); this.kontostandfield. settext(double.tostring(this.konto.getkontostand())); else if (source == this.abhebenbutton) { double betrag = Double.parseDouble(this.betragField.getText()); this.konto.abheben(betrag); this.kontostandfield. settext(double.tostring(this.konto.getkontostand())); //Ende Klasse BankKontoGUI: Grafische Benutzeroberflächen 16

Vollständiges Programm (1) import java.awt.*; import javax.swing.*; public class BankKontoGUI extends JFrame implements ActionListener { /* Attribute für GUI-Elemente */ private JTextField kontostandfield; private JTextField betragfield; private JButton einzahlenbutton; private JButton abhebenbutton; /* Referenz auf das Modell */ private BankKonto konto; public BankKontoGUI() { /* Objektverbindung Ansicht -> Modell herstellen*/ this.konto = new BankKonto(123.0); /* Titel und Groesse der GUI */ this.settitle("bankkonto"); this.setsize(300, 200); /* Initialisierung der Attribute */ this.kontostandfield = new JTextField(10); this.kontostandfield.settext(double.tostring(this.konto.getkontostand())); this.kontostandfield.seteditable(false); this.betragfield = new JTextField(10); this.einzahlenbutton = new JButton("Einzahlen"); this.abhebenbutton = new JButton("Abheben"); Grafische Benutzeroberflächen 17

Vollständiges Programm (2) /* Baumstruktur anlegen und Layout setzen */ JPanel kontostandpanel = new JPanel(); //lokale Variable kontostandpanel.add(new JLabel("Kontostand:")); kontostandpanel.add(this.kontostandfield); JPanel betragpanel = new JPanel(); //lokale Variable betragpanel.add(new JLabel("Betrag:")); betragpanel.add(this.betragfield); JPanel buttonpanel = new JPanel(); //lokale Variable buttonpanel.add(this.einzahlenbutton); buttonpanel.add(this.abhebenbutton); Container contentpane = this.getcontentpane(); contentpane.setlayout(new GridLayout(3,1)); //Grid mit 3 Zeilen und 1 Spalte contentpane.add(kontostandpanel); contentpane.add(betragpanel); contentpane.add(buttonpanel); /* Registrierung der BankKontoGUI als Listener bei den Buttons */ this.einzahlenbutton.addactionlistener(this); this.abhebenbutton.addactionlistener(this); /* Für ordnungsgemäße Beendigung der Anwendung bei Schließen (X) des Fensters */ this.setdefaultcloseoperation(jframe.exit_on_close); //Ende Konstruktor BankKontoGUI Grafische Benutzeroberflächen 18

Vollständiges Programm (3) /* Implementierung der Reaktionen auf Knopfdruck-Ereignisse */ public void actionperformed(actionevent e) { Object source = e.getsource(); if (source == this.einzahlenbutton) { double betrag = Double.parseDouble(this.betragField.getText()); //Einlesen des Betrags this.konto.einzahlen(betrag); //Einzahlen auf Konto this.kontostandfield.settext(double.tostring(this.konto.getkontostand())); //Ausgabe neuer Kontostand else if (source == this.abhebenbutton) { double betrag = Double.parseDouble(this.betragField.getText()); //Einlesen des Betrags this.konto.abheben(betrag); //Abheben vom Konto this.kontostandfield.settext(double.tostring(this.konto.getkontostand())); //Ausgabe neuer Kontostand //Ende Methode actionperformed //Ende Klasse BankKontoGUI /* Main-Klasse zum Start des Programms */ public class Main { public static void main(string[] args) { BankKontoGUI gui = new BankKontoGUI(); gui.setvisible(true); Grafische Benutzeroberflächen 19