Interaktive Elemente, GUI-Programmierung



Ähnliche Dokumente
HTML Formulare. Benutzerschnittstelle für interaktive Webseiten

Graphische Benutzungsoberflächen

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

2A Basistechniken: Weitere Aufgaben

Internationales Altkatholisches Laienforum

HTML5 Formulare. HTML5 Formulare Seite Seite 1 von 7 Florian Bauer

Abwesenheitsnotiz im Exchange Server 2010

Java Projekt: Tic Tac Toe + GUI

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Anleitung für die Formularbearbeitung

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Aufgaben HTML Formulare. Prof. Dr. rer. nat. Claus Brell, Wirtschaftsinformatik, Statistik

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

Lehrer: Einschreibemethoden

Schritt 1 - Ein Spielfeld

Warten auf Ereignisse

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Wir arbeiten mit Zufallszahlen

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Enigmail Konfiguration

Fachhochschule Fulda. Bedienungsanleitung für QISPOS (Prüfungsanmeldung, Notenspiegel und Bescheinigungen)

Vollversion:

Serienbrief mit Works 7.0

Aufruf der Buchungssystems über die Homepage des TC-Bamberg

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

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

Kursangebot gesammelt einlesen

Zählen von Objekten einer bestimmten Klasse

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Java I Vorlesung 11 Graphische Oberflächen mit Swing

1. Einführung. 2. Alternativen zu eigenen Auswertungen. 3. Erstellen eigener Tabellen-Auswertungen

Der erstmalige Besuch (Neuregistrierung)

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Anleitung zur Verwendung der VVW-Word-Vorlagen

Einführung in die Scriptsprache PHP

MyDHL SCHNELLEINSTIEG

In der Combobox der Art der Übermittlung (steht derzeit auf 0 für keine Definition), können Sie folgende Einstellungen vornehmen:

Treppensoftware Programme. Hilfe - 3D Plus Online. konstruieren/präsentieren

affilinet_ Flash-Spezifikationen

Swing Lernen am Code Teil 1

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Wenn Sie sich als Vertretungskraft für PES bewerben wollen, gehen Sie zur Selbstregistrierung auf folgende Internetadresse:

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

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

Erste Schritte mit Sfirm32 und itan

Aufklappelemente anlegen

Bedienungsanleitung für Mitglieder von Oberstdorf Aktiv e.v. zur Verwaltung Ihres Benutzeraccounts auf

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Anleitung zum LPI ATP Portal

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Animationen erstellen

Content Management System (CMS) Manual

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Import und Export von Übergängern

Um unsere Gemeindewebseite für Ihre Zwecke zu nutzen, haben Sie folgende Möglichkeiten:

SMS-Dienst SMS-Dienst procar informatik AG Stand: FS 04/2011 Eschenweg Weiterstadt 1

Sie können diesen Service verwenden, um fast beliebig große Dateien auch über 2 GB zu versenden.

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Auktionen erstellen und verwalten mit dem GV Büro System und der Justiz Auktion

StudyDeal Accounts auf

Anleitung für den Euroweb-Newsletter

4.1 Wie bediene ich das Webportal?

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Einführung in die Programmierung

So wird s gemacht - Nr. 24

GPS Garmin MapSource - Track erstellen und nutzen

So gehts Schritt-für-Schritt-Anleitung

1. Allgemein Speichern und Zwischenspeichern des Designs Auswahl der zu bearbeitenden Seite Text ergänzen Textgrösse ändern 3

Die Textvorlagen in Microsoft WORD und LibreOffice Writer

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Grundlagen der Programmierung APPLETS

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

UMSTELLUNG DER RÖNTGEN-SCHNITTSTELLE DÜRR-DBSWIN AUF DÜRR-VDDS

teischl.com Software Design & Services e.u. office@teischl.com

Sage50. Rechnungswesen. Geschäftsjahreswechsel. e Schweiz AG

HOSTED EXCHANGE MAIL FÜR MAC

Schritt für Schritt. Anmeldung

Anwendertreffen 20./21. Juni

Module Entwicklung. Um diese Eigenschaft aufzurufen, starten Sie die Adami Vista CRM Applikation und wählen Sie den Entwicklung Menü.

Anleitung für die Registrierung und das Einstellen von Angeboten

Konvertieren von Settingsdateien

So funktioniert das online-bestellsystem GIMA-direkt

Kontakte Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

iphone-kontakte zu Exchange übertragen

Tipps und Tricks zu den Updates

Objektorientierte Software-Entwicklung

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Formulare & Zähler. Erstellen von Formularen & Zählern mit FrontPage- oder ASP-Erweiterungen ZUGEHÖRIGE INFORMATIONEN

Ein Bild in den Text einfügen

Programmteil Bautagebuch

NODELOCKED LIZENZ generieren (ab ST4)

Java: Vererbung. Teil 3: super()

Transkript:

Softwaretechnik für IM, WS2015/2016 http://knopper.net/bw/swt/ Übung 4 Interaktive Elemente, GUI-Programmierung 1. Schreiben Sie ein Programm (wahlweise als Applet oder Applikation, oder beides), das die folgenden interaktiven Elemente enthält: (a) Einen Button, (b) ein Eingabetextfeld, (c) ein Aufklapp-Menü mit mindestens zwei Elementen, (d) zwei Radio-Checkboxen, (e) zwei normale (unabhängig auswählbare) Checkboxen. Veränderungen in den Bedienelementen sollen (graphisch) im unteren Bereich des Fensters angezeigt werden. Bei Klick auf den Schließen -Knopf soll das Programm beendet werden. Prinzipiell könnten bei jedem Klick auf den Button alle Elemente ausgelesen werden, wenn sie als globale Variablen innerhalb der Klasse implementiert sind. Interessanter ist jedoch, die bei jedem Element auftretenen Events direkt darzustellen, dies wurde in der Musterlösung MultiGUI.java so eingebaut. MultiGUI.java: // Dieses Programm soll verschiedene Java-Bedienelemente in einem Fenster // sichtbar machen, und Aktionen ausgeben. // In der Aufgabenstellung steht zwar, dass immer auf den BUTTON // geklickt werden soll, um die anderen Elemente auszulesen, aber // es ist interessanter, wenn bei jedem Element direkt bei dessen // Veränderung eine Aktion ausgelöst wird. import java.awt.*; // AWT-Grafikklassen importieren import java.awt.event.*; // AWT-Eventklassen importieren import java.applet.*; // Enthält die Definition der Applet-Klasse // MultiGUI ist abgeleitet von Klasse Applet, und enthält damit // auch Funktionen wie add(), init(), paint(graphics g)... // ActionListener ist für Buttons, ItemListener für Menüs // und Checkboxen zuständig public class MultiGUI extends Applet implements ActionListener,ItemListener { // Bei Applets werden die folgenden Funktionen aufgerufen: // paint(graphics g) - immer, wenn das Browser-Fenster neu gezeichnet wird // start() - beim Start des Applet // init() - Kurz nach dem Laden des Applet 1

// stop() - Wenn auf eine andere Webseite verzweigt wird, wird das Applet // angehalten. // init(): GUI aufbauen, WENN als Applet gestartet. public void init() { showgui(); // main() wird in der Variante "Standalone-Anwendung" verwendet. // Wenn das Programm als Applet läuft (im Browser) wird main() ignoriert. public static void main(string[] args){ Frame frame = new Frame("MultiGUI"); // Fenster frame.setsize(800,600); // Applet erzeugen MultiGUI applet = new MultiGUI(); // in applet haben wir nun alle Methoden zur Verfügung // Applet mit Fenster verbinden frame.add(applet); // Wir wollen das Fenster auch schließen können. frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e){ System.exit(0); ); // Und jetzt sind wir da, wo wir mit Browser auch gewesen wären. :-) applet.init(); // Siehe oben. applet.start(); // Standard-Methode aus Applet, damit es losläuft. frame.setvisible(true); // Fenster sichtbar machen. public void showgui(){ // Layout der Elemente: Positionierung pixelgenau per setbounds() setlayout(null); // Freies/manuelles Layout // Zeichensatz für diverse Elemente Font font = new Font("SansSerif", Font.BOLD, 16); // Schrift // Die Bedienelemente Button button = new Button("Klick"); // Ein Knopf-Objekt button.setfont(font); // Schriftart für Knopf setzen. button.setbounds(10,10,80,30); // Position und Größe des Knopfes add(button); // Und den Knopf dem Fenster oder Applet hinzufügen button.addactionlistener(this); // Aktuelle Klasse enthält die // ActionListener-Funktionen TextField textfield = new TextField("Textfeld", 20); // Ein Textfeld textfield.setfont(font); textfield.setbounds(100,10, 280, 30); add(textfield); // Mit Applet verknüpfen textfield.addactionlistener(this); Choice choice = new Choice(); // Ein Aufklapp-Menü choice.setfont(font); choice.setbounds(10,80,260,60); choice.add("erster Menüeintrag"); choice.add("zweiter Menüeintrag"); choice.add("dritter Menüeintrag"); 2

add(choice); choice.additemlistener(this); CheckboxGroup radio = new CheckboxGroup(); // "Radio"-Checkboxen Checkbox checkbox1 = new Checkbox("Eins", radio, true); Checkbox checkbox2 = new Checkbox("Zwei", radio, true); checkbox1.setfont(font); checkbox2.setfont(font); checkbox1.setbounds(10,150,200,60); checkbox2.setbounds(250,150,200,60); add(checkbox1); add(checkbox2); checkbox1.additemlistener(this); checkbox2.additemlistener(this); Checkbox c1 = new Checkbox("Checkbox 1"); // Unabhängige Checkboxen Checkbox c2 = new Checkbox("Checkbox 2"); c1.setfont(font); c2.setfont(font); c1.setbounds(10,200,200,60); c2.setbounds(250,200,200,60); add(c1); add(c2); c1.additemlistener(this); c2.additemlistener(this); // Eine eigene Funktion, die an Stelle y des Fensters einen Text zeichnet public void printtext(string text, int y) { Graphics g = getgraphics(); g.clearrect(10,y-40,780,80); // Alten Text löschen (Rechteck) g.drawstring(text, 10, y); // Hier stehen die Methoden aus "implements ActionListener". Es gibt // nur eine. public void actionperformed(actionevent e) { printtext(e.tostring(), 350); // Hier stehen die Methoden aus "implements ItemListener". Es gibt nur eine. public void itemstatechanged(itemevent e) { printtext(e.tostring(), 350); 2. Schreiben Sie ein GUI, das (a) zwei Texteingabefelder mit Beschriftung Zahl 1 und Zahl 2, (b) einen Knopf mit Beschriftung Addieren enthält. Bei Druck auf den Knopf sollen die Bedienelemente verschwinden, Zahl 1 und Zahl 2 addiert und das Ergebnis im Fenster dargestellt werden. Das Programm kann als Standalone Java-Anwendung, als Applet, oder beides gleichzeitig realisiert werden. Es ist komplizierter, als es sich zunächst anhört, da die Eingabe-Knöpfe während der Darstellung des Ergebnisses verschwinden sollen. Im Beispiel Addieren.java wurde dies durch die Funktion setenabled(false) gelöst, so dass keine Eingaben mehr stattfinden können, während das Ergebnisfenster noch auf dem Bildschirm ist. 3

Ein Problem kann bei diesem Programm aber noch auftreten: die Konvertierungsfunktion Integer.valueOf(zahlenfeld.getText()).intValue() kann abstürzen, wenn keine Zahl im Feld steht, dann erscheint das Ergebnisfenster gar nicht. Demnächst werden wir lernen, wie Fehler in Programmen abgefangen und selbst behandelt werden können. Addieren.java: import java.awt.*; // AWT-Grafikklassen importieren import java.awt.event.*; // AWT-Eventklassen importieren import java.applet.*; // Enthält die Definition der Applet-Klasse public class Addieren extends Applet { // Da wir auf die Textfelder und Button von mehreren Methoden aus // zugreifen wollen, definieren wir sie direkt hier in der Klasse. private final static Label label1 = new Label("Zahl 1:"); private final static Label label2 = new Label("Zahl 2:"); private final static TextField zahl1 = new TextField("", 20); // 1. Textfeld private final static TextField zahl2 = new TextField("", 20); // 2. Textfeld private final static Button addieren = new Button("Addieren"); // Knopf-Objekt private final static Font font = new Font("SansSerif", Font.BOLD, 16); // init(): GUI aufbauen, WENN als Applet gestartet. public void init() { // Grid Layout der Elemente setlayout(new GridLayout(3,2)); // Zeichensatz setfont(font); add(label1); add(zahl1); add(label2); add(zahl2); add(addieren); addieren.addmouselistener(new MouseAdapter(){ public void mouseclicked(mouseevent e){ // Ergebnis zeigen showresult(); ); // main() wird in der Variante "Standalone-Anwendung" verwendet. // Wenn das Programm als Applet läuft (im Browser) wird main() ignoriert. public static void main(string[] args){ Frame frame = new Frame("Addieren"); // Fenster frame.setsize(400,150); // Applet erzeugen Addieren applet = new Addieren(); // Applet mit Fenster verbinden frame.add(applet); // Wir wollen das Fenster auch schließen können. frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e){ System.exit(0); ); applet.init(); applet.start(); frame.setvisible(true); // Fenster sichtbar machen. 4

// Eine eigene Funktion, die das Ergebnis in einem Fenster anzeigt. public void showresult() { // Achtung: Das Umwandeln von String nach int kann schiefgehen. Wir lernen // später eine Möglichkeit kennen, Fehler abzufragen und selbst zu behandeln. int result = Integer.valueOf(zahl1.getText()).intValue() + Integer.valueOf(zahl2.getText()).intValue(); // Erst mal die Knöpfe im Hauptfenster deaktivieren. zahl1.setenabled(false); zahl2.setenabled(false); addieren.setenabled(false); final Frame frame = new Frame("Ergebnis"); frame.setsize(200,100); frame.setfont(font); Button ergebnis = new Button(Integer.toString(result)); frame.add(ergebnis); // Bei Klick auf Button, zurück zum Hauptfenster. ergebnis.addmouselistener(new MouseAdapter(){ public void mouseclicked(mouseevent e){ frame.dispose(); // Fenster schließen // Die Knöpfe im GUI wieder aktivieren. zahl1.setenabled(true); zahl2.setenabled(true); addieren.setenabled(true); ); // Bei Klick auf Schließen, zurück zum Hauptfenster. frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e){ frame.dispose(); // Fenster schließen // Die Knöpfe im GUI wieder aktivieren. zahl1.setenabled(true); zahl2.setenabled(true); addieren.setenabled(true); ); frame.setvisible(true); 3. Bilden Sie die beiden Programm-Oberflächen aus den vorigen Aufgaben mit HTML ab. Wie könnten hierbei die Aktionen zur Auswertung der Bedienelemente implementiert werden? ( Web-Teil der Vorlesung) Die Aktionen zur Auswertung der Bedienelemente sind in dieser Lösung in JavaScript implementiert (ohne action=...). MultiGUI-in-HTML.html: <HTML> <HEAD> <TITLE>MultiGUI in HTMLL</TITLE> <meta http-equiv="content-type" content="text/html; charset=utf8"> <!-- Wg. Zeich <!-- Ein Javascript-Programm zum Auswerten im Header --> <script type="text/javascript"> function show(element){ // Einmal Event in Dialogox ausgeben: alert("element: " + element + "\ninhalt: " + element.value + " "); // Einmal Event in letztes Formularfeld schreiben: document.ausgabeformular.ausgabefeld.value="element: " + element + "\n" + "Inha 5

</script> </HEAD> <BODY> <H1 ALIGN=CENTER>MultiGUI in HTML</H1> <H2 ALIGN=CENTER>(Analog Beispiel "Formulare" aus der Vorlesung)</H2> <FORM NAME="Formular"> <H4>Buttons</H4> <!-- Ein Button zum Zurücksetzen auf den Anfangszustand --> <INPUT name=resetknopf type=reset value="reset" onclick="show(document.formular.resetknopf); return false;"> <!-- Ein Button zum "Abschicken" des Formulars --> <INPUT type=submit name=submitknopf value="submit"i onclick="show(document.formular.submitknopf); return false;"> <!-- Ein JAVASCRIPT-Button --> <INPUT type=button name="jsbutton" value="(javascript-)button" onclick="show(document.formular.jsbutton); return false;"> <H4>Ein einzeiliges Eingabefeld (INPUT type=text)</h4> <input name=eingabefeld type=text size=40 maxlength=80 value="vorgabe" onchange="show(this); return false;"> <H4>Ein mehrzeiliges Eingabefeld (TEXTAREA... /TEXTAREA)</H4> <textarea name=mehrfach_textfeld cols=40 rows=5 onchange="show(this); return false"> Hier könnte Ihr Text stehen... </textarea> <H4>Ein Popup-Menü (SELECT mit OPTION...)</H4> <select name=popup onchange="show(this)"> <option value=36>größe 36</option> <option value=38>größe 38</option> <option value=40>größe 40</option> <option value=42>größe 44</option> </select> <H4>Ein Mehrfachauswahl-Menü (SELECT mit OPTION und MULTIPLE...)</H4> 6

<select name=mehrfach_menu multiple onchange="show(this)"> <option value=101>papadams</option> <option value=102>garlic Naan</option> <option value=103>chicken Marsala</option> <option value=103>firni</option> </select> <H4>Checkboxen zum An- oder Abwählen (INPUT type=checkbox)</h4> <input type=checkbox name=box1 value=1 onchange="show(this)"> Bitte keine Werbun <input type=checkbox name=box2 value=2 CHECKED onchange="show(this)"> Ich möchte <input type=checkbox name=box3 value=3 onchange="show(this)"> Bitte schicken Sie <H4>Radio-Boxen zum Auswählen und automatischen Abschalten der jeweils anderen. <input type=radio name=antwort value=a onchange="show(this)"> Antwort A ist rich <input type=radio name=antwort value=b onchange="show(this)"> Antwort B ist rich <input type=radio name=antwort value=c onchange="show(this)"> Antwort C ist rich <br> <input type=radio name=antwort2 value=1 onchange="show(this)"> Antwort 1 ist ric <input type=radio name=antwort2 value=2 onchange="show(this)"> Antwort 2 ist ric <input type=radio name=antwort2 value=3 onchange="show(this)"> Antwort 3 ist ric </FORM> <H4>Ausgabefeld: Hier werden die Javascript-Events angezeigt</h4> <FORM NAME=Ausgabeformular> <TEXTAREA NAME=Ausgabefeld COLS=40 ROWS=5 READONLY></TEXTAREA> </FORM> </BODY> </HTML> Addieren-in-HTML.html: <HTML> <HEAD><TITLE>Ein "Additions"-Programm in Javascript</TITLE></HEAD> <BODY> <!-- Eine Funktion, um die Fläche zu berechnen --> <SCRIPT type="text/javascript"> function addieren(){ // Erst mal die Werte aus dem Formular lesen // Achtung: Wird kein parsefloat() verwendet, nimmt JavaScript an, // dass es sich um Texte handelt, und hängt sie bei "+" zusammen! var eingabe1 = parsefloat(document.formular.eingabe1.value); var eingabe2 = parsefloat(document.formular.eingabe2.value); // Jetzt die Summe berechnen var ergebnis = eingabe1 + eingabe2; // Und nun das Ergebnis im Textfeld ausgeben 7

document.formular.ergebnis.value = ergebnis; // Ende der Funktion "addieren" </SCRIPT> <FORM NAME=Formular> Geben Sie bitte zwei Zahlen ein: <input type=text size=4 NAME=Eingabe1> + <input type=text size=4 NAME=Eingabe2> <!-- Bei Klick soll die Funktion "quadrat()" aufgerufen werden. --> <input type=button value=" = " onclick="addieren(); return false;"> <input type=text size=4 NAME=Ergebnis VALUE="?" READONLY> </FORM> </BODY> </HTML> 8