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



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

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

JList JTable Layout-Manager GridBagLayout. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Einführung in GUI-Programmierung. javax.swing

Javakurs für Fortgeschrittene

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

Einführung in GUI-Programmierung. javax.swing

Einführung in die Programmierung für NF. Grafische Benutzeroberflächen

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

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Objektorientierte Software-Entwicklung

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

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt WS 2006/2007

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

Grafische Benutzeroberflächen

GUI Programmierung mit JAVA Swing

Grafische Benutzeroberflächen

Grafische Benutzeroberflächen

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

Javakurs für Fortgeschrittene

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

Funktionale und Objekt-Orientierte Programmierkonzepte

Programmiertechnik GUI Programmierung mit Java Swing

Java für Computerlinguisten

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

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

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Grafische Benutzeroberflächen mit Swing

Einführung in die Programmierung für NF. Übung

JLabel. dient zur Textanzeige. können auch Bilder anzeigen: mylabel.seticon( new ImageIcon( C:/Pfad/zum/Bild.jpg )

Grafische Benutzeroberflächen Container Menüs JComponent JLabel/JTextField Buttons Events und Listener. Programmieren I.

Ziele. Kapitel 8: Grafische Benutzerschnittstellen. AWT und Swing. Ziele (2)

Kapitel 8: Grafische Benutzerschnittstellen

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

Graphical User Interfaces

Institut für Informatik

Layout Manager. Astrid Beck FHT Esslingen

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

Objektorientierte Programmierung

Ereignisse (Events) in Java

Vorlesung Programmieren

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

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

Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel

GUI Programmierung mit javax.swing

Java GUI Entwicklung mit Swing

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Fachhochschule Stuttgart Prof. Uwe Schulz 5. Juli 2006 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

Ho Ngoc Duc IFIS - Universität zu Lübeck

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

Grundlagen der Programmierung APPLETS

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

7. Architektur interaktiver Systeme

Einführung in Swing. Graphical User Interface

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

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

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

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

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

GUI-Programmierung in Java

...erinnern Sie sich? oopjs4b / kwhbkd4r

Swing :Komponenten I (Teil 2)

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

Schablonen für Klassen, Interfaces oder Methoden, die noch nicht festgelegte Datentypen verwenden

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

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

GroupLayout Anmerkung

Hauptklausur: PRGII MD

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Fachhochschule Stuttgart Prof. Uwe Schulz 14. Juli 2005 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

1. Konventionelle Ein-/Ausgabebetonte Programmierung

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

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

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

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

JAVA Oberflächen mit Swing

Benutzeroberflächen. Java Teil 4

GRAFISCHE BENUTZERSCHNITTSTELLEN

04 - Actions. Actions

public class Beispiel1 extends Frame {

NTB Druckdatum:

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

Liste Programmieren Java Überblick

Swing Lernen am Code Teil 1

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

11. GUI-Programmierung mit SWING Überblick

Medientechnik. Übung 2 Java Swing

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

B1. Ein-/Ausgabebetonte Programmierung

Aufbau einer typischen Java-Datei

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

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Objektorientierte Softwareentwicklung

Transkript:

Programmieren II Dr. Klaus Höppner Hochschule Darmstadt SS 2008 1 / 22 2 / 22 Einführung: GUI Fast alle Programme besitzen mittlerweile eine grafische Benutzeroberfläche (engl: Graphical User Interface, GUI). Ziele sind: einfache Bedienung mit der Maus einheitliches Look & Feel der Anwendungen Stichwort: Usability Typische Elemente von GUIs sind: Menüs Symbolleisten (tool bar) Schaltfächen Auswahlfelder (button, radio button, check box, pull-down menu) Texteingabefelder Java im Vergleich zu anderen Sprachen Java enthält eine direkte Unterstützung für grafische Oberflächen, die Teil der Laufzeitumgebung ist. Daher liegt Java insbesondere hier gegenüber anderen Sprachen im Vorteil. Java ist heute der Weg, grafische Anwendung über Systemgrenzen hinweg portabel zu schreiben. Für die meisten anderen Programmiersprachen gibt es zwar GUI-Zusatzpakete, diese stehen aber oft zueinander in Konkurrenz und sind nur auf wenigen Systemen verfügbar, z. B. Microsoft Foundation Classes (Visual Basic, Visual C++), Windows Forms (Visual C#/Basic/C++.NET), Qt (C++, Python auf Unix und Windows), GTK (C++, Python auf Unix), Tk 3 / 22 4 / 22

AWT Einfache AWT-Anwendung Bereits beim ersten Java-Release 1995 war ein Toolkit zum Erstellen grafischer Oberflächen enthalten: AWT Abstract Window Toolkit Features: heavyweight: AWT definiert eine Abstraktionsebene über den Betriebssystembibliotheken für Oberflächen. Auslagerung der Arbeit an das Betriebssystem Betriebssystem-typisches Look & Feel aber uneinheitliches Aussehen der selben Anwendung auf verschiedenen Plattformen import java.awt.*; public class AwtApp { Frame myframe = new Frame("Erstes Fenster"); myframe.setsize(400, 200); myframe.add(new Label("Hallo")); myframe.setvisible(true); Beschränkung auf kleinsten Nenner 5 / 22 6 / 22 Swing Swing ist Teil der Java Foundation Classes, die ursprünglich von Netscape als Internet Foundation Classes entwickelt wurden und dann in Kooperation von Sun und Netscape in Java 1.2 integriert wurden. Wesentliche Eigenschaften: lightweight, die Widget-Klassen sind in Java selber implementiert und nur auf wenig Ressourcen des unterliegenden Betriebssystems aufgesetzt einheitliches Aussehen der Anwendungen auf verschiedenen Plattformen entspricht nicht unbedingt dem Look & Feel des Betriebssystems erweiterbares Komponentenmodell import javax.swing.*; Einfache Swing-Anwendung public class SwingApp extends JFrame { public SwingApp(String title) { setsize(400, 200); add(new JLabel("Hallo")); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); SwingApp myapp = new SwingApp("Erstes Fenster"); 7 / 22 8 / 22

Grundsätzliche Entwicklungsschritte Toplevel-Elemente Swing kennt insgesamt drei Toplevel-Elemente: Der Entwurf einer grafischen Anwendung zerfällt in zwei Schritte: 1. Entwurf der grafischen Komponenten und deren Anordnung 2. Implementierung der Eventbehandlung (z. B. Eingabe von Text, Klicken auf Schaltflächen etc.) JFrame ein Fenster mit Rahmen und Titel Selbst geschriebene Anwendungen mit grafischer Oberfläche befinden sich meist innerhalb eines JFrame. Daher erbt die Hauptklasse einer Anwendung oft von JFrame. JDialog für Meldungsfenster JApplet für Java-Applets, die innerhalb eines (Java-fähigen) Webbrowsers laufen. Innerhalb eines Toplevel-Fensters können beliebige Komponenten (außer anderen Toplevel-Fenstern) angeordnet werden. 9 / 22 10 / 22 Der Layout-Manager Beispiel Der Layout-Manager ist für die Platzierung der Komponenten innerhalb eines Containers (z. B. ein Toplevel-Element) verantwortlich. Swing kennt im Wesentlichen: FlowLayout ordnet Komponenten von links nach rechts an BorderLayout Anordnung nach Himmelsrichtungen GridLayout Anordnung in Zeilen und Spalten GridBagLayout komplexeres GridLayout Als einfaches Beispiel soll folgende Anwendung realisiert werden: Titelzeile oben, In der Mitte eine 2 2-Tabelle mit Label und einem Texteingabefeld in der ersten Zeile und Label und Ergebnisfeld in der zweiten Zeile, Anwendungsschaltfläche unten Beim Klicken auf Anwenden soll im eingegebenen Text die Anzahl des Buchstaben e gezählt und im Ergebnisfeld ausgegeben werden. 11 / 22 12 / 22

Grundgerüst Grundgerüst (Forts.) import javax.swing.*; import java.awt.*; public class MyApp extends JFrame { private JTextField eingabe; private JLabel result; JLabel top = new JLabel("Bitte einen Text eingeben"); top.sethorizontaltextposition(swingconstants.center); this.add(top, BorderLayout.PAGE_START); JButton applybutton = new JButton("Anwenden"); this.add(applybutton, BorderLayout.PAGE_END); this.setdefaultcloseoperation(jframe.exit_on_close); this.setsize(400, 200); this.setlayout(new BorderLayout()); MyApp app = new MyApp("e-Anwendung"); app.setvisible(true); 13 / 22 14 / 22 Aktueller Stand Neuer Konstruktor von MyApp Durch dieses Grundgerüst existieren das Hauptfenster mit zentrierter Titelzeile oben und einer Schaltfläche Anwenden unten. Die Tabelle im Format 2 2 in der Mitte soll im GridLayout gesetzt werden. Hierfür wird im Zentrum ein Container, nämlich ein JPanel eingefügt, der das Grid enthält. JPanel ist weitgehend identisch zu JFrame, aber natürlich ohne Rahmen und Fenstertitel.... JPanel mid = new JPanel(); mid.setlayout(new GridLayout(2,2,10,10)); this.add(mid,borderlayout.center); eingabe = new JTextField(); result = new JLabel(); mid.add(new JLabel("Eingabe")); mid.add(eingabe); mid.add(new JLabel("Antwort")); mid.add(result); 15 / 22 16 / 22

GridLayout Aktionen ausführen Die Layout-Klasse GridLayout kennt drei Konstruktoren: GridLayout() Standardkonstruktor, GridLayout(int rows, int cols) Grid mit Angabe von Zahl der Zeilen und Spalten, GridLayout(int rows, int cols, int hgap, int vgap) wie zuvor, aber mit Angabe von horizontalem (hgap) und vertikalem (vgap) Abstand zwischen den Zellen. Nun sieht die Anwendung etwa so aus: Noch passiert beim Klicken auf Anwenden nichts. Hierfür muss bei der Aktion Klicken auf die Schaltfläche eine entsprechende Aktion ausgelöst werden. Für diese Aktionen existiert das Interface ActionListener, das die abstrakte Methode actionperformed enthält. Klassen, die ActionListener implementieren, können nun mit der Methode actionperformed von JButton in die Liste der auszuführenden Aktionen aufgenommen werden. 17 / 22 18 / 22... import java.awt.event.*; Quelltext public class MyApp extends JFrame implements ActionListener { private JTextField eingabe; private JLabel result;... applybutton.addactionlistener(this); public void actionperformed(actionevent event) { int count = 0; String text = eingabe.gettext(); for (int i=0; i<text.length(); i++) { if (text.charat(i)== e ) count++; result.settext(string.valueof(count)); 19 / 22 import java.awt.*; import java.awt.event.*; Kompletter Quelltext public class MyApp extends JFrame implements ActionListener { private JTextField eingabe; private JLabel result; this.setdefaultcloseoperation(jframe.exit_on_close); this.setsize(400, 150); this.setlayout(new BorderLayout()); JLabel top = new JLabel("Text eingeben",jlabel.center); top.sethorizontaltextposition(swingconstants.center); this.add(top, BorderLayout.PAGE_START); 20 / 22

Kompletter Quelltext (Forts.) Kompletter Quelltext (Forts.) JButton applybutton = new JButton("Anwenden"); this.add(applybutton, BorderLayout.PAGE_END); applybutton.addactionlistener(this); JPanel mid = new JPanel(); mid.setlayout(new GridLayout(2,2,10,10)); this.add(mid,borderlayout.center); eingabe = new JTextField(); result = new JLabel(); mid.add(new JLabel("Eingabe")); mid.add(eingabe); mid.add(new JLabel("Antwort")); mid.add(result); public void actionperformed(actionevent event) { int count = 0; String text = eingabe.gettext(); for (int i=0; i<text.length(); i++) { if (text.charat(i)== e ) { count++; result.settext(string.valueof(count)); MyApp app = new MyApp("e-Anwendung"); app.setvisible(true); 21 / 22 22 / 22