Grafische Benutzeroberflächen

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

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

Kapitel 14. Systemarchitektur

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

GUI Programmierung mit JAVA Swing

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

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

7. Architektur interaktiver Systeme

Institut für Informatik

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

Objektorientierte Programmierung

Objektorientierte Software-Entwicklung

Benutzeroberflächen. Java Teil 4

...erinnern Sie sich? oopjs4b / kwhbkd4r

Swing Lernen am Code Teil 1

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

Java Lab 2006/12/13 Client

NTB Druckdatum:

Javakurs für Anfänger

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

2A Basistechniken: Weitere Aufgaben

Grafische Benutzeroberflächen mit Swing

Einführung in Swing. Graphical User Interface

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

GUI-Programmierung in Java

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

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

Rückblick. Geltungsbereich von lokalen Variablen? Wo leben lokale Variablen? Geltungsbereich von Instanzvariablen? Wo leben Instanzvariablen?

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Arrays Fortgeschrittene Verwendung

04 - Actions. Actions

Informatik I Eprog HS10

GUIs in Java und ihre Programmierung

Grundlagen der Programmierung APPLETS

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

Teil 1: Grundeigenschaften von Rechnern und Software

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

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

Ansonsten VIEL SPAß! Nicholas Ohs (GK 11 IF 2)

Swing oder AWT? Was ist das: Swing bzw. AWT. Haupterkennungsmerkmal von Swing Source-Code:

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Probeklausur: Programmierung WS04/05

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arbeitsblatt 5 EAD II NetBeans

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

Dr. Monika Meiler. Inhalt

Techniken der Projektentwicklung

Objektorientierte Softwareentwicklung

public class Beispiel1 extends Frame {

Überblick und Wiederholung

Swing :Komponenten I (Teil 2)

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

Java: Vererbung. Teil 3: super()

Mensch-Maschine-Interaktion

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Einstieg in die Informatik mit Java

2. Programmierung von Benutzungsschnittstellen

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Teil 1: Grundeigenschaften von Rechnern und Software

Entwicklung von E-Learning Komponenten zur Computergrafik

Swing Grundlagen. Andre Eichmann

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

Fachhochschule Fulda Fachbereich Angewandte Informatik. Hausarbeit Seminar: Java3D. Java Layout-Manager WS 2002/2003

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Einstieg in die Informatik mit Java

Probeklausur: Programmierung WS04/05

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

In Track B generell gute Java-Kenntnisse vorausgesetzt!

Programmierkurs. 11. Vorlesung. Sven Mallach. 13. Januar Institut für Informatik - Lehrstuhl Prof. Dr. M. Jünger 1/ 60

11. GUI-Programmierung mit SWING Überblick

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Interaktive Elemente, GUI-Programmierung

Graphische Benutzungsoberflächen

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

Ereignisbehandlung 21

Auszug aus der Klassenstruktur

11. GUI-Programmierung mit SWING Überblick

Programmierkurs Java

Klausur vom 14. Juni Informatik 4

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Codestil. Erläuterung und Definition eines einheitlichen Codestils. Anfänger-Praktikum SS 2004 Gruppe 2 Tutor Aaron Ruß Autor: Tomas Cernaj

GUI Programmierung in Java

GUI-Programmierung. Kapitel Der Window-Manager


Software Engineering Entwurfsmuster (update: 11.6.)

Vorlesung Programmieren

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Programmieren 2 Selbststudium Semesterwoche 4

Test von Oberflächen. 6. Test von Software mit Nutzungsoberflächen. Erinnerung: GUI-Aufbau mit Swing. Achtung: Swing und Threads

$ java awt.main A # typische Dekodierung $ java -Dtrace=all awt.main A # alle Events $ java -Dtrace=none awt.main A # keine Dekodierung

6. Objektorientiertes Design

Beispiellösung der Klausur zu Objektorientierte Programmierung mit Java 09. Juli 2004 (SS 2004)

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Ein Manager mit CardLayout layout/cards.java

Transkript:

Gilbert Beyer und Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik http://www.pst.ifi.lmu.de/lehre/wise-11-12/infoeinf WS11/12

Aufgabe Ein Benutzer soll zwei Zahlen in ein Programm eingeben können. Das Programm kann entweder die Summe oder das Produkt der beiden Zahlen berechnen und ausgeben. Schreiben Sie ein Programm, das möglichst benutzerfreundlich ist, d.h. Benutzereingaben geeignet abfragt, eine interaktive Auswahl für Summen- oder Produktberechnung bereitstellt, das Ergebnis schön darstellt. 2

Programme ohne GUI (Graphical User Interface) Benutzereingaben (wie zwei Zahlen) direkt im Code beim Aufruf des Programms zu übergeben (in Vorlesung nicht behandelt) Interaktive Auswahl: nicht möglich Ausgabe des Ergebnis (wie Summe/Produkt der beiden Zahlen): per Kommandozeile public class Berechnung { public static void main(string[] args) { int a = 2; int b = 3; int summe = a+b; System.out.println( Summe: + summe); }} 3

Programme mit grafischer Benutzereingabe Benutzereingaben (wie zwei Zahlen): mit Hilfe von JOptionPane, aber für jede Eingabe ein neues Eingabe-Fenster Interaktive Auswahl: mit Hilfe von JOptionPane Ausgabe des Ergebnis (wie Summe/Produkt der beiden Zahlen): per Kommandozeile oder mit JOptionPane (nicht behandelt) public class Berechnung { public static void main(string[] args) { String a = JOptionPane.showInputDialog( 1. Zahl: ); String b = JOptionPane.showInputDialog( 2. Zahl: ); String berechnung = JOptionPane.showInputDialog( Summe oder Produkt: );... }} 4

Programme mit GUI (Graphical User Interface) Das Programm besteht aus einer grafischen Oberfläche z.b. einem Fenster Benutzereingaben (wie zwei Zahlen): im Eingabebereich des Fensters z.b. durch Textfelder Interaktive Auswahl: im Eingabebereich des Fensters z.b. durch Buttons Ausgabe des Ergebnis (wie Summe/Produkt der beiden Zahlen): im Ausgabebereich des Fenster z.b. durch Textfeld => Funktion mehrfach verwendbar ohne Programmneustart 5

Aufgabe: Lösung mit GUI 6

Aufgabe: Vorgehensweise zur Erstellung der GUI 1. Erstellung des strukturellen Aufbaus der GUI: a. Erstellung des Basis-Fensters b. Attribute für Eingabefelder, Buttons und Ausgabebereich c. Initialisierung der Eingabefelder, Buttons und Ausgabebereichs d. Platzierung der Eingabefelder, Buttons und Ausgabebereichs auf dem Basis-Fenster 2. Verbindung der GUI mit inhaltlichen Objekten der Anwendung: hier nicht nötig (nur zwei Zahlen) 3. Ereignisgesteuerte Behandlung von Benutzereingaben: a. Berechnung der Summe nach Knopfdruck des Buttons für Summe b. Berechnung des Produkts nach Knopfdruck des Buttons für Produkt c. Ordnungsgemäßes Schließen des Programms 7

Aufgabe: 1. Erstellung des strukturellen Aufbaus (I) 1a. Erstellung des Basis-Fensters: Anlegen einer neuen Klasse BerechnungsFrame Erben von javax.swing.jframe Setzen von Titel und Größe des Basis-Fensters import javax.swing.*; public class BerechnungsFrame extends JFrame { public BerechnungsFrame() { this.settitle( Berechnung ); this.setsize(350,150); } } 8

Aufgabe: 1. Erstellung des strukturellen Aufbaus (II) Einschub: Ausführen des Programms public class BerechnungsFrameMain { public static void main(string[] args) { BerechnungsFrame berechnung = new BerechnungsFrame(); berechnung.setvisible(true); } } 9

Aufgabe: 1. Erstellung des strukturellen Aufbaus (III) 1b. Attribute für Eingabefelder, Buttons und Ausgabebereich import javax.swing.*; public class BerechnungsFrame extends JFrame { private JLabel zahl1eingabelabel; private JTextField zahl1eingabefeld; private JLabel zahl2eingabelabel; private JTextField zahl2eingabefeld; private JButton summebutton; private JButton produktbutton; private JTextArea ausgabebereich; public BerechnungsFrame() { this.settitle( Berechnung ); this.setsize(350,150); }} 10

Aufgabe: 1. Erstellung des strukturellen Aufbaus (IV) 1c. Initialisierung der Eingabefelder, Buttons und Ausgabebereichs import javax.swing.*; public class BerechnungsFrame extends JFrame {... // Attribute wie vorher public BerechnungsFrame() { this.settitle( Berechnung ); this.setsize(350,150); this.zahl1eingabelabel = new JLabel("1. Zahl:"); this.zahl1eingabefeld = new JTextField(25); this.zahl2eingabelabel = new JLabel("2. Zahl:"); this.zahl2eingabefeld = new JTextField(25); this.summebutton = new JButton("Summe"); this.produktbutton = new JButton("Produkt"); this.ausgabebereich = new JTextArea(3, 33); }} 11

Aufgabe: 1. Erstellung des strukturellen Aufbaus (V) 1d. Platzierung auf dem Basis-Fenster Staffelei: Basis-Fenster JFrame (bzw. BerechnungsFrame) Leinwand auf der Staffelei: ContentPane des Basis-Fensters Zugriff innerhalb des Basis-Fensters: Container contentpane = this.getcontentpane(); Zugriff außerhalb des Basis-Fensters: BerechnungsFrame frame = new BerechnungsFrame(); Container contentpane = frame.getcontentpane(); Bild auf der Leinwand: Interaktionselemente wie Buttons 12

Aufgabe: 1. Erstellung des strukturellen Aufbaus (VI) 1d. Platzierung auf dem Basis-Fenster import javax.swing.*; public class BerechnungsFrame extends JFrame {... // Attribute wie vorher public BerechnungsFrame() {... // Initialisierung wie vorher Container contentpane = this.getcontentpane(); contentpane.add(this.zahl1eingabelabel); contentpane.add(this.zahl1eingabefeld); contentpane.add(this.zahl2eingabelabel); contentpane.add(this.zahl2eingabefeld); contentpane.add(this.summebutton); contentpane.add(this.produktbutton); contentpane.add(this.ausgabebereich); }} 13

Aufgabe: 1. Erstellung des strukturellen Aufbaus (VII) Einschub: Ausführen des Programms größer ziehen 14

Aufgabe: 1. Erstellung des strukturellen Aufbaus (VIII) Einschub: LayoutManager Standardmäßig ist das Layout des ContentPane ein FlowLayout: alle Interaktionselemente werden solange in eine Zeile nebeneinander gesetzt, bis kein Platz mehr in der Zeile ist, weitere Interaktionselemente kommen in die nächste Zeile. => Je nach Größe des Fensters verschieben sich die Interaktionselemente! 1 2 3 4 5 6 FlowLayout mit breitem Fenster 1 2 3 4 5 6 FlowLayout mit schmalem Fenster 15

Aufgabe: 1. Erstellung des strukturellen Aufbaus (IX) Einschub: LayoutManager GridLayout: Es kann angegeben werden, wie viele Zeilen und Spalten das Fenster haben soll. Jedes Interaktionselement wird der Reihe nach in eine der so entstandenen Zellen gesetzt. => Jede der Zelle ist so groß wie das größte Interaktionselement 1 2 3 4 5 6 GridLayout mit zwei Zeilen und drei Spalten 16

Aufgabe: 1. Erstellung des strukturellen Aufbaus (X) Einschub: LayoutManager GridLayout: Implementierung import javax.swing.*; public class BerechnungsFrame extends JFrame {... // Attribute wie vorher public BerechnungsFrame() {... // Initialisierung wie vorher Container contentpane = this.getcontentpane(); contentpane.setlayout(new GridLayout(4,2)) contentpane.add(this.zahl1eingabelabel);... // Hinzufügen wie vorher }} 17

Aufgabe: 1. Erstellung des strukturellen Aufbaus (XI) Einschub: Ausführen des Programms größer ziehen 18

Aufgabe: 1. Erstellung des strukturellen Aufbaus (XII) Einschub: Gruppierung von Interaktionselementen Interaktionselemente können in einem JPanel gruppiert werden. Dieses JPanel kann wie alle anderen Interaktionselemente platziert werden. import javax.swing.*; public class BerechnungsFrame extends JFrame {... // Attribute wie vorher public BerechnungsFrame() {... // Initialisierung wie vorher JPanel eingabepanel1 = new JPanel(); eingabepanel1.add(this.zahl1eingabelabel); eingabepanel1.add(this.zahl1eingabefeld);... // analog für 2. Zahl und Buttons // -> Fortsetzung nächste Folie 19

Aufgabe: 1. Erstellung des strukturellen Aufbaus (XIII) Einschub: Gruppierung von Interaktionselementen Interaktionselemente können in einem JPanel gruppiert werden. Dieses JPanel kann wie alle anderen Interaktionselemente platziert werden. // -> Fortsetzung von vorheriger Folie Container contentpane = this.getcontentpane(); contentpane.setlayout(new GridLayout(4,1)) contentpane.add(eingabepanel1); contentpane.add(eingabepanel2); contentpane.add(buttonpanel); contentpane.add(this.ausgabebereich); } } 20

Aufgabe: 1. Erstellung des strukturellen Aufbaus (XIV) Einschub: Ausführen des Programms eingabepanel1 eingabepanel2 buttonpanel ausgabebereich größer ziehen 21

Aufgabe: 2. Verbindung der GUI mit inhaltlichen Objekten Es werden lediglich zwei Zahlen eingelesen und addiert oder multipliziert => Keine Speicherung nötig! 22

Aufgabe: 3. Behandlung von Benutzereingaben (I) 3a. Berechnung der Summe nach Knopfdruck des Summe-Buttons Ein ActionListener muss beim Summe-Button registriert werden, der auf den Knopfdruck wartet und entsprechend reagiert BerechnungsFrame implementiert ActionListener (d.h. er wird zu einem ActionListener) Der BerechnungsFrame wird beim Summe-Button registriert import javax.swing.*; public class BerechnungsFrame extends JFrame implements ActionListener {... // Attribute wie vorher public BerechnungsFrame() {... // Initialisierung und Platzierung wie vorher this.summebutton.addactionlistener(this); }} 23

Aufgabe: 3. Behandlung von Benutzereingaben (II) 3a. Berechnung der Summe nach Knopfdruck des Summe-Buttons Ein ActionListener muss beim Summe-Button registriert werden, der auf den Knopfdruck wartet und entsprechend reagiert BerechnungsFrame wartet in der Methode actionperformed auf den Knopfdruck des Summe-Buttons import javax.swing.*; public class BerechnungsFrame extends JFrame implements ActionListener {... // Attribute und Konstruktor wie vorher public void actionperformed(actionevent e) { if (e.getsource() == this.summebutton) { this.summiere(); } }} 24

Aufgabe: 3. Behandlung von Benutzereingaben (III) 3a. Berechnung der Summe nach Knopfdruck des Summe-Buttons Ein ActionListener muss beim Summe-Button registriert werden, der auf den Knopfdruck wartet und entsprechend reagiert BerechnungsFrame reagiert in der Methode summiere entsprechend import javax.swing.*; public class BerechnungsFrame extends implements {... // Attribute, Konstruktor, actionperformed wie vorher private void summiere() { int zahl1 = Integer.parseInt(this.zahl1EingabeFeld.getText()); int zahl2 = Integer.parseInt(this.zahl2EingabeFeld.getText()); this.ausgabebereich.settext("summe: "+(zahl1+zahl2)); }} 25

Aufgabe: 3. Behandlung von Benutzereingaben (IV) 3a. Berechnung der Summe nach Knopfdruck des Summe-Buttons Was passiert eigentlich? summebutton:jbutton frame:berechnungsframe summebutton. addactionlistener(this) Knopfdruck frame.actionperformed(e) Summen- Berechnung (siehe summiere) 26

Aufgabe: 3. Behandlung von Benutzereingaben (V) 3b. Berechnung des Produkts nach Knopfdruck des Prod.-Buttons Ein ActionListener muss beim Produkt-Button registriert werden, der auf den Knopfdruck wartet und entsprechend reagiert Der BerechnungsFrame wird beim Produkt-Button registriert BerechnungsFrame wartet in der Methode actionperformed auf den Knopfdruck des Produkt-Buttons BerechnungsFrame reagiert in der Methode multipliziere entsprechend import javax.swing.*; public class BerechnungsFrame extends implements {... // Implementierung analog zu vorher erweitern } 27

Aufgabe: 3. Behandlung von Benutzereingaben (VI) 3c. Ordnungsgemäßes Schließen des Programms Das Programm muss beim Drücken des X-Buttons (rechts-oben) sowohl das Fenster als auch das Programm selbst beenden. Fenster wird automatisch beendet. Programm muss von Hand beendet werden. import javax.swing.*; public class BerechnungsFrame extends implements {... // alles wie vorher mit Erweiterung des Konstruktors public BerechnungsFrame() {... // wie vorher this.setdefaultcloseoperation(jframe.exit_on_close); } } 28

Aufgabe: gelöst 29