Telecooperation/RBG. Grundlagen der Informatik 1 Thema 21: GUI und verschachtelte Klassen. Dr. Guido Rößling

Größe: px
Ab Seite anzeigen:

Download "Telecooperation/RBG. Grundlagen der Informatik 1 Thema 21: GUI und verschachtelte Klassen. Dr. Guido Rößling"

Transkript

1 Technische Universität Darmstadt Telecooperation/RBG Grundlagen der Informatik 1 Thema 21: GUI und verschachtelte Klassen Dr. Guido Rößling Copyrighted material; for TUD student use only

2 AWT und Swing AWT = Abstract Window Toolkit Package java.awt Benutzt Steuerelemente des darunterliegenden Betriebssystems Native Code (direkt für die Maschine geschrieben, keine VM) schnell Aussehen (Look) hängt vom System ab: unterschiedliche Schriften, Portabilität eingeschränkt Swing Package javax.swing (Teil der Java Foundation Classes) Merkmal: Swing-Klassen beginnen mit J : JButton,... Vollständig in Java programmiert, eigener Look Baut auf AWT auf Verwendet ein Minimum an systemspezifischen Komponenten 2

3 Komponenten Einige oft verwendete Komponenten und für welche Interaktionsaufgaben sie verwendet werden Anzeigen von Text und Symbolen JLabel Auslösen von Aktionen JButton JMenu JMenuItem 3

4 Komponenten Eingabe von Text JTextField Auswahl aus einer festen Menge von Optionen JCheckBox Auswahl aus einer variablen Menge JList gegenseitig ausschließend: JRadioButton JComboBox Button oder TextField + ausklappbare Listbox 4

5 Menschliche Faktoren Beim Entwurf interaktiver Programme gibt es neben der funktionalen Vollständigkeit und Korrektheit viele zusätzliche Aspekte zu beachten Dazu gehört die Art und Weise der Interaktion und wie leicht sie zu erlernen und benutzen ist Richtlinien für gute GUIs sind u.a.: Vermeide Modi. Allgemein sinnvolle Operationen sollten immer verfügbar sein. Biete einfache und durchgängige Interaktionssequenzen an. Überfordere den Benutzer nicht durch zu viele Optionen. Zeige bei jeder Interaktionsstufe klar die verfügbaren Optionen. Gib dem Benutzer angemessene Rückmeldungen. Gib dem Benutzer die Möglichkeit, Fehler problemlos rückgängig zu machen. 5

6 Anatomie einer GUI-Applikation GUI-Framework Container Netz von kooperierenden Objekten mit klar festgelegten Zuständigkeiten: Komponenten Ereignisse Anwendungslogik Methodenaufrufe auf Komponente Listener Zustand: wert=3 Komponenten Container Ereignisse Listener Layout Legt die Anordnung der Komponenten fest Look & Feel Legt das Aussehen der Komponenten fest getrennt: Anwendungslogik 6

7 Fäden (Threads) Sequentielle Programme haben Anfang, definierte Ausführungssequenz und Ende. Zu jedem Zeitpunkt ist genau eine Anweisung aktiv. Ein Faden (Thread) ist ein einzelner sequentieller Kontrollfluss in einem Programm. Programm Faden Nebenläufige Programme Programme können mehrere Fäden besitzen. Mehrere Programmteile können so quasi gleichzeitig ablaufen. Programm Fäden 7

8 Fäden (Threads) Fäden (Threads) nutzen die Ressourcen des Prozesses mit, in dem sie ablaufen besitzen keine eigenen Speichersegmente verfügen über einen eigenen Registersatz (inkl. Programmzähler und Statusregister) sowie einen eigenen Stack werden oft auch als leichtgewichtige Prozesse (lightweight processes) bezeichnet. GUI-Applikationen besitzen neben dem Haupt-Thread einen sogenannten Event-Dispatching Thread Dieser Thread ruft Methoden der Anwendung auf, wenn bestimmte Ereignisse auftreten (Callback) Die Ereignisbehandlungsroutinen in der Anwendung werden sequentiell ausgeführt Das Zeichnen von Komponenten wird ebenfalls im Kontext dieses Threads ausgeführt 8

9 Programmiermodell main Anwendung GUI-Framework (SWING) main Komponente einfügen AWT-EventQueue AWT-EventQueue AWT-EventQueue Ereignis: Komponente zeichnen Ereignis: Benutzereingabe 9

10 Fenster import javax.swing.jframe; public class GUITest extends JFrame { // The width of the window in pixels public static final int WIDTH = 400; // The height of the window in pixels public static final int HEIGHT = 300; // Constructs a new window with a given title public GUITest(String title) { super(title); // Start test application. Creates a new window and displays it public static void main(string args[]) { // Construct a new window. It is initially invisible GUITest thewindow = new GUITest("My first GUI Application"); // Set width and height of the window thewindow.setsize(width, HEIGHT); // Open the window thewindow.setvisible(true); System.out.println("Exiting main..."); 10

11 Fenster Wir beobachten... main() wird verlassen, das Programm läuft aber weiter. Ø Mehrere Fäden. Der Event-Dispatching Thread läuft weiter. Klick auf Schließen-Button beendet das Programm nicht. Ø Ereignisverarbeitung fehlt. Genaueres dazu später. 11

12 Container JFrame Container und Komponenten JFrame: top level container JPanel benutzt Fenster vom Betriebssystem JLabel JPanel: intermediate container dient zum Gruppieren und Anordnen von Komponenten Verschachtelung möglich JLabel, JButton,...: atomare Komponenten präsentieren dem Benutzer Informationen erlauben oft Interaktion und Eingabe (Steuerelemente) Container-Hierarchie Selbst die einfachste Anwendung besteht aus einer Hierarchie von Containern und Komponenten (Darstellung vereinfacht. Die Container zwischen JFrame und JPanel werden hier nicht weiter betrachtet) JFrame... JPanel JLabel 12

13 Komponenten Hinzufügen von Komponenten Der JFrame erzeugt automatisch ein JPanel, das contentpane. Darin kann die Anwendung neue Komponenten einfügen. contentpane Die Komponenten werden eingefügt, während das Fenster noch unsichtbar ist, also zwischen dem Erstellen des Fenster-Objekts mit new und der Anzeige mit setvisible(true). JLabels stellen Text oder/und Symbole dar sind passive Komponenten, erlauben keine Interaktion JFrame... JPanel JLabel 13

14 Labels import java.awt.container; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { public GUITest(String title) { super(title); // Retrieve the area where one can add elements Container pane = getcontentpane(); // Create a new label that displays help information JLabel label = new JLabel( "Press the [X] in the top right corner to exit"); // Add the label to the content of the window pane.add(label); //... 14

15 Buttons import java.awt.container; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { public GUITest(String title) { super(title); Container pane = getcontentpane(); JLabel label = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(label); // Create a new push button that may be used in addition to the [X] JButton button = new JButton("Exit"); // Add the button to the content of the window pane.add(button); //... 15

16 Layout Wir beobachten... Der Text ist nicht mehr sichtbar, denn der Button liegt darüber! Layout-Management ist der Prozess, die Größe und Position von Komponenten zu bestimmen. Das gewünschte Layout wird durch Zuordnung eines Layout- Objekts zum Container festgelegt: Container pane = getcontentpane(); pane.setlayout(new GridLayout(ROWS, COLS)); Die Layout-Klasse implementiert das Interface LayoutManager. 16

17 Vordefinierte Layouts GridLayout Ordnet die Komponenten in einem rechteckigen Gitter an. Die Reihenfolge des Einfügens der Komponenten bestimmt ihre Anordnung. BorderLayout Positioniert in 5 Regionen jeweils maximal eine Komponente Die Regionen N, E, S und W werden so klein wie möglich gehalten. Der restliche Platz entfällt auf CENTER. Zuordnung zu einer Region durch zusätzlichen Parameter beim Aufruf von Container.add: add(new Button("SOUTH"), BorderLayout.SOUTH); Weitere Layouts: BoxLayout, FlowLayout, GridBagLayout,... Siehe die Java API Dokumentation und die Tutorials für mehr Informationen 17

18 GridLayout import java.awt.container; import java.awt.gridlayout; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { public GUITest(String title) { super(title); Container pane = getcontentpane(); // Define a LayoutManager that places new elements properly // onto the pane. Here we use a grid with 3 rows and 1 column. pane.setlayout(new GridLayout(3, 1)); JLabel label = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(label); JButton button = new JButton("Exit"); pane.add(button);... 18

19 Ereignisse (Events) Jedesmal, wenn der Benutzer eine Taste drückt oder die Maus bewegt, tritt ein Ereignis ein. Steuerelemente können Maus- und Tastatur-Ereignisse verarbeiten und neue Ereignisse erzeugen. Beispiel: Befindet sich der Mauszeiger über einem Button und die Maustaste wird losgelassen, dann wird ein ActionEvent erzeugt. Ereignisse werden durch Event-Objekte beschrieben Die zugehörigen Klassen sind von java.awt.awtevent abgeleitet. (für GUI; allgemeiner: java.util.eventobject) Der Typ gibt Auskunft über die Art des Ereignisses: ActionEvent: Benutzer klickt einen Button, drückt Return in einem Textfeld, wählt einen Menüeintrag,... WindowEvent: Benutzer schließt Fenster, Die Attribute geben zusätzliche Informationen über das Ereignis, z.b. welcher Button gedrückt wurde. 19

20 Listener Mehrere Listener können sich bei einer Ereignis-Quelle (event source) registrieren und werden von diesem Zeitpunkt an über Ereignisse eines bestimmten Typs informiert. event source event object event listener event listener event listener Programmieren eines Listeners: Das Klasse des Empfänger-Objekts (event listener) muss das dem Ereignistypen entsprechende Interface implementieren. Z.B. für ActionEvents das Interface ActionListener. Die Klasse muss alle Methoden des Interface implementieren. Der Klient registriert nun das Empfänger-Objekt bei der Ereignis- Quelle. Z.B. mittels addactionlistener(listener) 20

21 Ereignisse import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { public GUITest(String title) { super(title); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); JLabel label = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(label); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener()); pane.add(button); private class ChangeButtonListener implements ActionListener { public void actionperformed(actionevent event) { System.out.println("Change Label Text was clicked"); //... Das ist eine verschachtelte Klasse (nested class). Später mehr dazu! 21

22 View-Updates Die durch Komponenten dargestellten Informationen und ihr Aussehen können durch Aufrufen ihrer Methoden verändert werden. JLabel-API (Auszug): void settext(string) String gettext() void sethorizontalalignment(int) int gethorizontalalignment() void setverticalalignment(int) int getverticalalignment() Setzen oder auslesen des dargestellten Texts Textausrichtung: LEFT, CENTER oder RIGHT Textausrichtung: TOP, CENTER oder BOTTOM 22

23 Ereignisse import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { private JLabel infolabel; public GUITest(String title) { super(title); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener()); pane.add(button); private class ChangeButtonListener implements ActionListener { public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); //... 23

24 Window-Events Beim Klicken auf den Schließen-Button soll das Programm nun korrekt beendet werden. Ø Registrieren eines WindowListeners Interface WindowListener: void windowactivated(windowevent e) void windowclosed(windowevent e) void windowclosing(windowevent e) Window wurde aktiviert Fenster wurde nach dispose() geschlossen Benutzer hat auf Schließen geklickt void windowdeactivated(windowevent e) Fenster wurde deaktiviert void windowdeiconified(windowevent e) Fenster wurde de-minimiert void windowiconified(windowevent e) void windowopened(windowevent e) Fenster wurde minimiert Fenster wurde gerade geöffnet 24

25 Adapter Beim Verwenden von Interfaces müssen immer alle Methoden implementiert werden. Das ist oft unpraktisch, deshalb existieren Adapter. WindowAdapter implementiert WindowListener definiert alle Methoden mit leerem Rumpf und somit ohne Verhalten ist eine abstrakte Klasse. Der anwendungsspezifische Event-Handler wird nun von WindowAdapter abgeleitet und überschreibt nur die interessanten Methoden. 25

26 WindowEvents import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import java.awt.event.windowadapter; import java.awt.event.windowevent; public class GUITest extends JFrame { private JLabel infolabel; public GUITest(String title) { super(title); // Now, also define that the [X] terminates the program correctly addwindowlistener(new MyWindowListener()); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); // Create a new push button that may be used in addition to the [X] JButton button = new JButton("Exit"); // Define that the program should exit if you click the button button.addactionlistener(new ExitButtonListener()); pane.add(button); 26

27 Window Events // Create another button that changes the text of the Label button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener()); pane.add(button); private class ChangeButtonListener implements ActionListener { public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); // Exit the program when the window close button is clicked class MyWindowListener extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); // Exit the program when the Exit -button is clicked class ExitButtonListener implements ActionListener { public void actionperformed(actionevent event) { System.exit(0); public static void main(string args[]) { GUITest thewindow = new GUITest("My first GUI Application"); thewindow.setsize(width, HEIGHT); thewindow.setvisible(true); public static final int WIDTH = 400; public static final int HEIGHT = 300; 27

28 Verschachtelte Klassen: Motivation Die GUI Komponenten erwarten als Listener eine Instanz von XYZListener (z.b. ActionListener) Wie können wir ein passendes Listener Objekt erstellen? Option 1: Frame-Klasse implementiert das Listener Interface direkt Option 2: Externe Klasse implementiert das Listener Interface 28

29 Option 1: Frame-Klasse implementiert das Listener Interface direkt import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame implements ActionListener { public GUITest(String title) { super(title); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); JLabel label = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(label); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(this); pane.add(button); public void actionperformed(actionevent event) { System.out.println("Change Label Text was clicked"); //... 29

30 Option 1: Frame-Klasse implementiert das Listener Interface direkt Diese Möglichkeit funktioniert zwar, ist aber im Allgemeinen unbefriedigend Was ist, wenn es mehr als einen Button gibt? Klasse kann nicht zwei actionperformed Methoden haben! Es gibt nicht nur Buttons, sondern auch Labels, Menus, Frame-Klasse implementiert eine Menge an Interfaces, die nichts mit seiner eigentlichen Funktionalität zu tun haben action-methoden müssen public sein, obwohl es eigentlich Implementationsdetails sind, die nicht zur Schnittstelle von Frame gehören Im Allgemeinen ist dies eine schlechte Lösung 30

31 Option 2: Externe Klasse implementiert das Listener Interface import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { private JLabel infolabel; public GUITest(String title) { super(title); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener()); pane.add(button); class ChangeButtonListener implements ActionListener { public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); 31

32 Option 2: Externe Klasse implementiert das Listener Interface Hat nicht die konzeptuellen Nachteile von Option 1 z.b. kein Problem, unterschiedliche Aktionen für unterschiedliche Buttons zu definieren Das Interface des Frames wird nicht verunstaltet Nachteile dieses Ansatzes Führt zu sehr vielen Klassen Übersichtlichkeit leidet Geringere Kohäsion Externe Listener-Klasse wird evtl. nur an genau einer Stelle benutzt Aufwändig und lästig, für jeden Listener eine eigene Klasse anzulegen Zugriff auf Instanzvariablen/Methoden/lokale Variablen der Frame Klasse aufwändig Alles muss explizit im Konstruktor übergeben werden 32

33 Option 2: Externe Klasse implementiert das Listener Interface import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { private JLabel infolabel; public GUITest(String title) { super(title); Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener(infoLabel)); pane.add(button); class ChangeButtonListener implements ActionListener { private JLabel infolabel; public ChangeButtonListener(JLabel l) { infolabel = l; public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); 33

34 Verschachtelte Klassen Beide Möglichkeiten (Option 1 + Option 2) sind nicht zufriedenstellend Dies war die Hauptmotivation für Sun, mit Java 1.1 die verschachtelten Klassen (nested classes) einzuführen Verschachtelte Klassen sind Klassen innerhalb von Klassen Werden deklariert wie ganz normale Klassen, außer dass sie innerhalb anderer Klassen stehen Einige Zugriffsregeln sind anders Verschachtelte Klassen haben Zugriff auf Instanzvariablen/Methoden der äußeren Klasse 34

35 Verschachtelte Klassen import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { private JLabel infolabel; public GUITest(String title) { super(title); - Nested Class kann private sein - Klasse nur innerhalb der umschließenden Klasse sichtbar - hat Zugriff auf private Instanzvariable der umschließenden Klasse Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ChangeButtonListener()); pane.add(button); private class ChangeButtonListener implements ActionListener { public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); //... 35

36 Verschachtelte Klassen Jede verschachtelte Klasse benötigt bei der Instanziierung eine Referenz auf eine Instanz der umschließenden Klasse Bei Instanziierung innerhalb der umschließenden Klasse wird diese Referenz implizit übergeben Außerhalb einer umschließenden Klasse als enclinstance.new MyInnerClass() Der Typ einer nested Class N innerhalb C ist C.N Innerhalb von C reicht die Typdeklaration N (implizites Scoping) Daumenregel: Wenn der Name einer nested class außerhalb der umschließenden Klasse benötigt wird, hat man etwas falsch gemacht. Verschachtelte Klassen können auch als static deklariert werden Semantik analog zu static Methoden: Kein Zugriff auf Instanzvariablen der äußeren Klasse, sondern nur auf static Methoden/Variablen 36

37 Anonyme verschachtelte Klassen import java.awt.container; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; public class GUITest extends JFrame { public GUITest(String title) { super(title); final JLabel infolabel; // now a local variable Container pane = getcontentpane(); pane.setlayout(new GridLayout(3, 1)); infolabel = new JLabel( "Press the [Exit] or [X] in the top right corner to exit"); pane.add(infolabel); pane.add(new JButton("Exit")); // Create another button that changes the text of the Label JButton button = new JButton("Change Label Text"); // Now, define what should happen if the button is pressed button.addactionlistener(new ActionListener() { public void actionperformed(actionevent event) { infolabel.settext("you clicked the button! Now [Exit] or [X]"); ); pane.add(button); 37

38 Anonyme verschachtelte Klassen Man kann innerhalb von Methoden anonyme Klassen anlegen Diese haben keinen Namen Sie werden nur über Supertypen angesprochen Syntax: new SuperClassName(args) { oder new InterfaceName() { Erzeugt implizit eine Subklasse der angegebenen Superklasse bzw. eine Klasse, die das angegebene Interface implementiert Gleichzeitig wird eine Instanz der anonymen Klasse erzeugt Diese Klasse kann über den angegebenen Superklassen/ Interface Namen benutzt werden Sogar lokale Variablen der Methode können in der Implementierung verwendet werden, sofern sie als final deklariert sind 38

39 Anonyme verschachtelte Klassen Vorteil gegenüber normalen verschachtelten Klassen Wenn die Klasse nur an einem einzigen Ort benötigt wird, wird kein Name verschwendet Definition der Klasse on the fly dort wo sie benötigt wird Einfacher Zugriff auf lokale Variablen / Methodenparameter Anonyme Klassen kommen dem lambda aus Racket recht nahe Mit lambda können in Racket Prozeduren on the fly definiert werden 39

40 Kompilierung von verschachtelten Klassen Wenn eine verschachtelte Klasse kompiliert wird, bekommt man für jede verschachtelte Klasse ein eigenes.class file mit dem Namen OuterClass $InnerClass.class Wenn eine anonyme Klasse kompiliert wird, heißt das File OuterClass$n.class (mit n=1, 2,...) Intern (auf JVM Ebene) gibt es keine verschachtelten Klassen Der Compiler transformiert intern den Code Für jede verschachtelte Klasse wird eine Top-Level Klasse angelegt, die alle benötigten Argumente im Konstruktor übergeben bekommt 40

41 GUI und Software Design GUIs können sehr aufwändig und kompliziert sein Die eigentliche Anwendung ebenfalls Wie strukturiert man eine Anwendung mit komplexer GUI? Regel Nr.1: Trennen Sie die Anwendungslogik von der Präsentationslogik 41

42 GUI Antipatterns Sie machen etwas falsch, wenn Sie in ihrer GUI-Klasse auf eine Datenbank zugreifen Ihre GUI-Klasse mehr als 50 KB groß ist in der GUI-Klasse Geschäftsprozesse implementiert werden Ihre Anwendungsdaten in GUI-Klassen gespeichert sind Besser: Schichtenarchitektur z.b. sog. Model-View-Controller Architektur trennt Daten/Anwendungslogik von Interaktion mit Benutzer Daten/Anwendungslogik hängt nicht von GUI ab einfach, mehrere Views zu unterstützen Austausch von Views einfach 42

43 Model-View-Controller Behandelt Nutzereingaben Controller controller updates Aktualisieren A B C Event senden Model Zugriff Hinweis auf Änderung Anwendungsdaten und Verhalten View Anzeige 43

44 MVC Das Modell Das Modell enthält die Daten Hat Methoden, um auf Daten zuzugreifen und sie zu ändern Benachrichtigt Listener/Observer, wenn sich die Daten ändern Kann (Teile) der Geschäftsprozesse implementieren 44

45 MVC Der Controller Verarbeitet die Eingaben des Benutzers zum Beispiel Validierung, Interpretation jeglicher Art, Häufig zuständig für die Benutzerführung der GUI Kommuniziert diese Eingaben zum Modell Kann präsentationsnahe Teile der Anwendungslogik enthalten z.b. Interaktionsfluss mit dem Benutzer Scharfe Trennung vom Modell ist oft schwierig Kann (muss aber nicht) spezifisch für eine feste GUI sein Controller hat oder hat nicht eine Instanzvariable die auf die GUI zeigt evtl. entkoppelt über Interface Bessere Wiederverwendbarkeit im letzteren Fall Schichtenstruktur 45

46 MVC Die View Die View stellt eine visuelle Repräsentation des Modells dar Es kann beliebig viele Views auf denselben Daten geben z.b. mehrere Instanzen derselben View Aber auch völlig unterschiedliche Views Zum Beispiel können die Finanzen einer Firma als Tabelle oder als Graph dargestellt werden Registriert sich beim Modell als Listener, zeichnet sich neu, wenn Modell sich ändert. 46

47 Internationalization (I18N) Internationalisierung: Bereitstellung von Inhalten in mehreren Sprachen Problematisch für GUIs: was muss sich ändern? Beispiel - Menüeintrag: Text [optionales] Icon Kürzel (hier: ALT+G) Tool tip ( Generate ) Englische Fassung: 47

48 Internationalization (I18N) Java bietet Basiselemente für Internationalization Die GUI-Anpassung muss aber vom Programmierer erfolgen Alternative: Nutzung des translator Package Siehe die Beispiele auf den folgenden Folien Grundlegender Ansatz: Alle sprachspezifischen Elemente kommen in eine Datei Eine Datei pro unterstützter Sprache Die Zeilen der Datei sind im Format key=wert key: ein String, der das Element beschreibt Wert: der auszugebende Wert für den key Anstelle echter Texte wird im Code nur der key genutzt 48

49 Sprachressourcen Alle Ressourcen kommen in die sprachspezifische Datei Diese Dateien haben alle den gleichen Basisnamen Zum Beispiel msg Die Dateierweiterung hat das Format sprache_land Die US-Englische Fassung steht in msg.en_us Deutsche Ressourcen stehen also in msg.de_de Beispiel für einen Inhalt: msg.en_us hi=hello! query=how are you today? msg.de_de hi=hallo! query=wie geht es Dir? 49

50 translator Package: Translator Ziel: Inhaltsübersetzung für eine Zielsprache Nutzt java.util.locale für die Sprachbestimmung Vordefinierte Locales: Locale.GERMANY, Locale.US, Die Zielausgabe hängt ab von bis zu drei Attributen: Sprache: de, en, es, Land: de, us, uk, Variante: spezifischer Code für Browser etc., z.b. WIN Anlegen einer neuen Instanz von Translator Parameter: Basisname der Ressourcen und Ziel-Locale: Translator mytrans = new Translator("msg", Locale.GERMANY); 50

51 translator Package: Translator Übersetzen einer Nachricht über String mytrans.translatemessage(key) Beispiel: mytrans.translatemessage("hi") à Hallo! Manchmal muss die Ausgabe parametrisiert werden Wie begrüßt man eine Person? à Hallo, Herr Schmidt! 51

52 Übersetzen parametrisierter Texte Das Package unterstützt Parameter in {: Angenommen, wir haben diese Definition in unserer Datei: personalized=hallo, {0! Nun können wir einen Parameter übergeben : mytrans.translatemessage("personalized, "Herr Schmidt"); à Hallo, Herr Schmidt! Parameter werden als Zahl ab 0 in { gesetzt Mehrere Parameter können übergeben werden in einem Array: translatemessage(key, Object[]) als Folge von Strings: translatemessage(key, String ) 52

53 Internationalisierte GUI-Anwendung Wir werden nun eine kleine GUI-Anwendung bauen Ein JFrame dient als Hauptfenster Mit einem JMenuBar Mit einem Datei -Menü Das hat einen Verlassem -Eintrag Zwei umrahmte JPanel: Eines mit einem JLabel und einem JButton Das zweite hat nur einen Beenden JButton mit Icon Jeder Klick auf den Button erhöht einen Zähler Verlässt man die Anwendung über den Beenden-Button, wird die Anzahl Klicks angezeigt Keine Sorge, das ist einfacher als es wirkt 53

54 I18N GUI Demo Code I import translator.translatableguielement; // for GUI elements import translator.translator; // for I18N of texts etc. // Swing & Event imports skipped use Eclipse auto-completion! public class I18NDemo { public int nrtimes = 0; // how often was the button clicked? /** * create the I18NDemo instance targetlocale the Locale used for the output */ public I18NDemo(Locale targetlocale) { // create the translator (resource file; target locale) Translator translator = new Translator("guiI18N", targetlocale); buildgui(translator); // create the GUI 54

55 I18N GUI Demo Code II /** * builds the GUI elements with full I18N support translator the Translator instance to be used */ public void buildgui(final Translator translator) { // retrieve the GUI element builder TranslatableGUIElement guibuilder = translator.getgenerator(); // create the window itself with an I18N title JFrame aframe = guibuilder.generatejframe("guidemo"); aframe.getcontentpane().setlayout(new BorderLayout()); // create a JMenuBar JMenuBar menubar = new JMenuBar(); 55

56 I18N GUI Demo Code III // generate the JMenu for this JMenu menu = guibuilder.generatejmenu("filemenu"); // generate a menu item with (key, useiconifexists) JMenuItem exititem = guibuilder.generatejmenuitem("exititem", true); exititem.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.exit(0); // exit ); // add the item to the JMenu menu.add(exititem); // add the menu to the menu bar and add this to the JFrame menubar.add(menu); aframe.setjmenubar(menubar); 56

57 I18N GUI Demo Code IV JPanel infopanel = guibuilder.generateborderedjpanel("infopanel"); aframe.getcontentpane().add(infopanel, BorderLayout.CENTER); // translatable JLabel JLabel label = guibuilder.generatejlabel("clickme"); infopanel.add(label); // add the info button AbstractButton info = guibuilder.generatejbutton("clickbutton"); info.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { System.err.println(translator.translateMessage("pressedN", String.valueOf(++nrTimes))); // show nr of button press ); infopanel.add(info); // add the info panel 57

58 I18N GUI Demo Code V JPanel exitpanel = guibuilder.generateborderedjpanel("exitpanel"); aframe.getcontentpane().add(exitpanel, BorderLayout.SOUTH); AbstractButton exit = guibuilder.generatejbutton("exitbutton"); // exit button exit.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e) { System.err.println(translator.translateMessage("bye", String.valueOf(nrTimes)); System.exit(0); // show good bye & # of pressed, exit ); exitpanel.add(exit); aframe.pack(); aframe.setvisible(true); public static void main(string[] args) { I18NDemo demo = new I18NDemo(Locale.GERMANY); 58

59 Ergebnis der GUI-Demo Hier ist das Ausgabefenster: JMenuBar mit JMenu Datei, Kürzel D Tooltip des Menüeintrags JLabel JFrame JMenuItem Verlassen mit Icon, Kürzel V, und Tooltip JButton, Kürzel Z Umrahmtes JPanel JButton, Kürzel B, mit Icon 59

60 Ergebnis der GUI-Demo Und hier die englische Fassung: JMenuBar mit JMenu File, Kürzel F Tooltip des Menüeintrags JLabel JFrame JMenuItem Exit mit Icon, Kürzel X, und Tooltip JButton, Kürzel I Umrahmtes JPanel JButton, Kürzel X, mit Icon Um dieses Fenster zu erhalten, ändert man eine Zeile: I18NDemo demo = new I18NDemo(Locale.US); 60

61 Abschließende Kommentare Sie haben es vielleicht nicht bemerkt Beide Buttons, das Menü und der Menüeintrag haben ein Kürzel (mnemonic) Alle GUI-Elemente haben einen tool tip text Aber die Texte etc. werden im Code nicht angegeben! Weil sie alle aus der Ressource-Datei stammen Diese wird auf den folgenden Folien gezeigt Spielen Sie ein wenig mit der API Sie finden Sie auf der Webseite mit Zusatzinfos Der Source Code kann dort auch heruntergeladen werden Man kann die Inhalte auch on the fly übersetzen Aufruf von translator.settranslatorlocale(newlocale) Kann etwa über einen Menüeintrag umgeschaltet werden 61

62 Englische Ressourcedatei zur GUI Demo hi=hello! personalized=hello, {0! multi=one {0 two {1 three {2 parameters nosuchkeyexception=there is no ressource for element {0 exitpanel=exit Panel exitbutton.iconname=quit.gif exitbutton.label=exit exitbutton.mnemonic=x exitbutton.tooltiptext=click this button to end the demo clickbutton.iconname= clickbutton.label=increment counter clickbutton.mnemonic=i clickbutton.tooltiptext=click here to increment the counter infopanel=info Area clickme=click here: filemenu.label=file filemenu.mnemonic=f filemenu.tooltiptext=contains the Exit item exititem.iconname=quit.gif exititem.label=exit exititem.mnemonic=x exititem.tooltiptext=exits the application pressedtimes=the increment button was pressed {0 times. bye=good bye - and thank you for pressing the button {0 times. guidemo=internationalization Demo 62

63 Deutsche Ressourcedatei zur GUI Demo hi=hallo! personalized=hallo, {0! multi=eins {0 zwei {1 drei {2 Parameter nosuchkeyexception=es gibt keine Ressource f\u00fcr Eintrag {0 exitpanel=beenden exitbutton.iconname=quit.gif exitbutton.label=beenden exitbutton.mnemonic=b exitbutton.tooltiptext=dr\u00fccken Sie diesen Knopf zum Beenden clickbutton.iconname= clickbutton.label=z\u00e4hler inkrementieren clickbutton.mnemonic=z clickbutton.tooltiptext=klicken Sie hier, um den Z\u00fchler zu inkrementieren infopanel=info-bereich clickme=bitte hier klicken: filemenu.label=datei filemenu.mnemonic=d filemenu.tooltiptext=enth\u0fe4lt nur den Eintrag 'Verlassen' exititem.iconname=quit.gif exititem.label=verlassen exititem.mnemonic=v exititem.tooltiptext=beendet die Anwendung pressedtimes=der Inkrementieren-Knopf wurde {0 Mal gedr\u00fcckt. bye=auf Wiedersehen - und Danke, dass Sie den Knopf {0 Mal gedr\u00fcckt haben. guidemo=demo zur Internationalisierung 63

Funktionale und Objekt-Orientierte Programmierkonzepte

Funktionale und Objekt-Orientierte Programmierkonzepte Funktionale und Objekt-Orientierte Programmierkonzepte Prof. Marc Fischlin, Wintersemester 15/16 Kapitel 17: GUI, Threads und verschachtelte Klassen 13. Oktober 2010 Dr.Marc Fischlin Kryptosicherheit 1

Mehr

GUI Programmierung mit JAVA Swing

GUI Programmierung mit JAVA Swing GUI Programmierung mit JAVA Swing Komponenten Layout Event Handling Imaging 2001 Thomas Weiler 1 JAVA Swing Bibliothek zur Erstellung grafischer Benutzerschnittstellen in JAVA Bietet Klassen für grafische

Mehr

Teil 5: Benutzeroberflächen 5.2 Einführung GUI-Programmierung Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt

Teil 5: Benutzeroberflächen 5.2 Einführung GUI-Programmierung Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt Grundzüge der Informatik 1 Teil 5: Benutzeroberflächen 5.2 Einführung GUI-Programmierung Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt AWT und SWING AWT = Abstract Window Toolkit Package java.awt

Mehr

Funktionale und objektorientierte Programmierkonzepte

Funktionale und objektorientierte Programmierkonzepte Funktionale und objektorientierte Programmierkonzepte Dr. Guido Rößling Thema 20 Grafische Benutzerschnittstellen Verschachtelte Klassen MVC (Model, View, Controller) Internationalisierung AWT und Swing

Mehr

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI) 1 JAVA für Bauingenieure Alexander Karakas SS 2008 Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI) 21.05.2008 2 Was ist ein(e) GUI? GUI = Graphical User Interface = Graphische

Mehr

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Java I Vorlesung 11 Graphische Oberflächen mit Swing Java I Vorlesung 11 Graphische Oberflächen mit Swing 5.7.2004 Swing Komponenten Layout-Manager Events Swing und Threads Die Java-Plattform 2 Die Java-Plattform 3 "Hello World" in Swing HelloWorldS.java

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Exkurs: Graphische Benutzeroberflächen FH Braunschweig/Wolfenbüttel Sommersemester 2009 1 / 22 Gliederung I Wiederholung Klassen, Objektorientierung (Kapitel 10,11) Exkurs:

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Ziele 2 (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen Benutzung von Vererbung zur Erstellung individueller GUI-Klassen durch Erweiterung

Mehr

Objektorientierte Software-Entwicklung

Objektorientierte Software-Entwicklung Objektorientierte Software-Entwicklung Priv.-Doz. Dr. Rolf Hennicker 08.01.2003 AWT und Swing AWT (Abstract Window Toolkit) und Swing 2 AWT (Abstract Window Toolkit) und Swing AWT und Swing bieten eine

Mehr

GUI Programmierung in Java

GUI Programmierung in Java vs und niemals mischen! Daher muss man sich für eine Klasse entscheiden 1 (Abstract Window Toolkit) schwergewichtige Alle Elemente werden vom Betriebssytem gemalt sehen aus wie alle anderen Programme auf

Mehr

Swing Lernen am Code Teil 1

Swing Lernen am Code Teil 1 Swing Lernen am Code Teil 1 Swing Fenster erzeugen import java.awt.* import java.awt.event.* import javax.swing.* class SwingDemo{ static JFrame Fenster; public static void main(string[] args){ } } Fenster

Mehr

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

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr. 40301 Seite 1 von 5. Teil 2: Aufgaben Hochschule der Medien Prof Uwe Schulz 14 Juli 2010 Klausur Informatik, EDV-Nr 40301 Seite 1 von 5 Name: Matr Nr: Teil 2: Aufgaben Hilfsmittel: alle außer tragbare Computer und Nachbar Bearbeitungszeit:

Mehr

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

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr. 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,

Mehr

GRAFISCHE BENUTZERSCHNITTSTELLEN

GRAFISCHE BENUTZERSCHNITTSTELLEN Vorlesung 4.4 GRAFISCHE BENUTZERSCHNITTSTELLEN Dr. Philip Mayer # 1 GUIs Grafische Benutzerschnittstellen (GUIs, Graphical User Interfaces) bieten dem Benutzer Zugriff auf ein Anwendungssystem GUIs sind

Mehr

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

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik GUI-Programmierung mit Java Teil I Unterlagen zum Modul OOP mit Java V 3.0 2007 by WBR1/BFH-TI 2011 by MOU2/BFH-TI GUI-Programmierung V3.0 2011 by WBR1&MOU2/BFH-TI Lernziele Die Kursteilnehmer sind in

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik GUI-Programmierung mit Swing AWT und Swing Java enthält zwei Pakete zur Programmierung graphischer Oberflächen. java.awt: Das Abstract

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1 Kapitel 7 Grafische Benutzeroberflächen Grafische Benutzeroberflächen 1 Ziele Grafische Benutzeroberflächen (Graphical User Interfaces) als Anwendungsbeispiel für die objektorientierte Programmierung kennenlernen.

Mehr

Graphische Benutzungsoberflächen

Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 14 Einstieg in die Informatik mit Java Swing Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 14 1 Einführendes Beispiel 2 Eigenschaften von Swing 3 Typisches Swing-Applet

Mehr

NTB Druckdatum: 01.04.13 -

NTB Druckdatum: 01.04.13 - AWT UND SWING AWT = abstract windowing toolkit Bausteine Eigenes Fenster Programmcode steht nicht im Main, sondern in einer separaten Klasse extends JFrame JWindow selbstständiges Fenster, ohne Rahmen

Mehr

Grafische Benutzeroberflächen mit Swing

Grafische Benutzeroberflächen mit Swing Grafische Benutzeroberflächen mit Swing KW 30, Zentralübung Informatik II 2006-07-24 Klausur: Stichpunkte 1. Auswertung System.out.println("abc" instanceof String); Ergebnis von instanceof ist ein boolean,

Mehr

Grundlagen der Programmierung APPLETS

Grundlagen der Programmierung APPLETS Grundlagen der Programmierung APPLETS Inhalt dieser Einheit Java-Applets: Java-Applets Vor- und Nachteile Sicherheitskonzepte Methoden Einbetten in HTML Graphical User Interface 2 Java Applets Applets

Mehr

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

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2 Inhalt 1. Printing API 1. Übersicht 2. Vorgehen 3. Beispiel 2. Klasse PrintUtils 3. Mehrere Seiten drucken Folie 1 Lernziele Sie wissen, wie Sie Swing-Komponenten ausdrucken können Sie kennen den Aufbau

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Kapitel 8: Grafische Benutzerschnittstellen

Kapitel 8: Grafische Benutzerschnittstellen Einführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Kapitel 8: Grafische Benutzerschnittstellen Prof. Dr. David Sabel Lehr- und Forschungseinheit für Theoretische

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Java Lab 2006/12/13 Client

Java Lab 2006/12/13 Client Java Lab 2006/12/13 Client Prof. Dr. Bernhard Humm Version: 1.0 Date: 2006/12/06 Darmstadt University of Applied Sciences Department of Computer Science Schöfferstr. 8b 64295 Darmstadt Germany 1 Einleitung

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

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

Ziele. Kapitel 8: Grafische Benutzerschnittstellen. AWT und Swing. Ziele (2) Einführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Ziele Kapitel 8: Grafische Benutzerschnittstellen Prof. Dr. David Sabel Lehr- und Forschungseinheit für Theoretische

Mehr

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

Einführung in die Programmierung für NF. Grafische Benutzeroberflächen Einführung in die Programmierung für NF Grafische Benutzeroberflächen Ziele Grafische Benutzeroberflächen (Graphical User Interfaces) als Anwendungsbeispiel für die objektorienferte Programmierung kennenlernen.

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Javakurs für Fortgeschrittene

Javakurs für Fortgeschrittene Javakurs für Fortgeschrittene Einheit 03: Swing Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in GUI-Programmierung Motivation Grundlagen von Swing Praxis: UI für

Mehr

Benutzeroberflächen. Java Teil 4

Benutzeroberflächen. Java Teil 4 Benutzeroberflächen Java Teil 4 Einleitung Eine grafische Benutzeroberfläche (Graphical User Interface) ermöglicht dem Benutzer die Interaktion mit dem Computer über grafische Symbole. Die GUI haben in

Mehr

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

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

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

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: graphical user interface, GUI) in Java GUI-Programmierung in Java GUI-Programmierung in Java 2002 Prof. Dr. Rainer Manthey Informatik II 1 AWT und Swing Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen

Mehr

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

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009. Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2009 1 / 30 2 / 30 JButton, JCheckBox, JRadioButton In Swing existieren drei wesentliche Klassen für Schaltflächen: JButton für normale

Mehr

Einführung in GUI-Programmierung. javax.swing

Einführung in GUI-Programmierung. javax.swing Einführung in GUI-Programmierung javax.swing GUI Graphical User Interface ( Grafische Benutzerschnittstelle ) Anschaulichere und leichtere Möglichkeit zur Dateneingabe und Kontrolle von Programmen Stellt

Mehr

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

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

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

Einführung: Grafische Benutzeroberflächen. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 22 Einführung: Grafische Benutzeroberflächen 2 / 22 Einführung: GUI Fast alle Programme besitzen mittlerweile eine grafische

Mehr

Programmiertechnik GUI Programmierung mit Java Swing

Programmiertechnik GUI Programmierung mit Java Swing Programmiertechnik GUI Programmierung mit Java Swing Prof. Dr. Oliver Haase Software Engineering und Verteilte Systeme Raum F012 haase@htwg-konstanz.de Tel: 07531/206-720 Oliver Haase Hochschule Konstanz

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster

Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster Kap. 35 Swing: Grundlagen Kap. 36.1 Swing: Hauptfenster by Ali Bastan Gliederung Grundlagen von Swing 1. Kurze Einleitung 2. Warum Swing, wenn es das AWT gibt? 3. Was ist Swing? 4. Merkmale von Swing 5.

Mehr

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

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ EAD II Übung 5 Graphische Benutzungsoberfläche mit BlueJ Graphische Benutzungsoberfläche (GUI) Fenster, das weitere Komponenten zur Darstellung und Interaktion enthält spezielle Standardbibliotheken erforderlich,

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Einführung in GUI-Programmierung. javax.swing

Einführung in GUI-Programmierung. javax.swing Einführung in GUI-Programmierung javax.swing GUI Graphical User Interface ( Grafische Benutzerschnittstelle ) Anschaulichere und leichtere Möglichkeit zur Dateneingabe und Kontrolle von Programmen Stellt

Mehr

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de Stand FTE2 Anfang 4. Semester plus Projekt Multiuhren_Thread Ich gehe im Hinblick auf Klassenarbeiten und der Abschlussprüfung davon aus, dass Sie das Skript OOP JAVA2 durchgearbeitet haben. Wir haben

Mehr

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

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog. Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung

Mehr

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

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke GUIs mit Swing Markus Reschke 28.08.2014 Beispiel: Ein einfaches GUI-Programm Siehe Painter.java Markus Reschke GUIs mit Swing 2 GUI Frameworks in Java AWT war das erste GUI-Framework, welches mit Java

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 5. Grafische Userinterfaces Christian Scheible Institut für Maschinelle Sprachverarbeitung 31. Juli 2009 Christian Scheible Java für Computerlinguisten 31. Juli 2009 1 / 33

Mehr

Microsoft Visual Studio Community 2015

Microsoft Visual Studio Community 2015 Microsoft Visual Studio Community 2015 Visual Studio Community 2015 ist eine kostenlose IDE mit leistungsfähigen Programmier- und Entwicklungswerkzeugen für Windows, ios und Android. Sie ist für einzelne

Mehr

Tipps und Tricks zu den Updates

Tipps und Tricks zu den Updates Tipps und Tricks zu den Updates Grundsätzlich können Sie Updates immer auf 2 Wegen herunterladen, zum einen direkt über unsere Internetseite, zum anderen aus unserer email zu einem aktuellen Update. Wenn

Mehr

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane Hochschule Harz Programmierung2 Tutorial 04: FB Automatisierung und Informatik Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm Programmierung 2 für MI / WI Thema: Swing, JSplitPane und I/O Versuchsziele Kenntnisse

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2009 Praktikum: Grundlagen der Programmierung Aufgabenblatt 11 Prof. R. Westermann, R. Fraedrich,

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

GEVITAS Farben-Reaktionstest

GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest Inhalt 1. Allgemeines... 1 2. Funktionsweise der Tests... 2 3. Die Ruhetaste und die Auslösetaste... 2 4. Starten der App Hauptmenü... 3 5. Auswahl

Mehr

Das Model View Controller (MVC) Konzept

Das Model View Controller (MVC) Konzept Das Model View Controller (MVC) Konzept Ziel: Erhöhung der Flexibilität und Reduktion der Komplexität von GUI-Programmen durch Standard- Struktur (MVC-Pattern). Geht zurück auf Smalltalk. View 1 View 2

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung Aufgabe Editor package BA.GUI.Swing; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.logging.level; import java.util.logging.logger;

Mehr

Design Patterns 2. Model-View-Controller in der Praxis

Design Patterns 2. Model-View-Controller in der Praxis Design Patterns 2 Model-View-Controller in der Praxis Design Patterns Oft Schablonen für eine Klassenstruktur... aber nicht immer! Dahinterliegende Konzepte wichtiger als wörtliche Umsetzung Pattern werden

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

Visual Basic Express erstes Projekt anlegen

Visual Basic Express erstes Projekt anlegen Inhalt Dokument Beschreibung... 1 Erstes Projekt anlegen... 1 Verweise hinzufügen... 2 Imports setzen... 5 Public Class vorbereiten... 6 Mehrere Tools programmieren... 7 Dokument Beschreibung Nach der

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

WPF Steuerelemente Listbox, ComboBox, ListView,

WPF Steuerelemente Listbox, ComboBox, ListView, WPF Steuerelemente Listbox, ComboBox, ListView, Dr. Beatrice Amrhein Überblick Einführung Listen ComboBox Tabellen 2 Einführung 3 Listen- und Tabellen-Elemente Listen und Tabellen-Elemente sind Steuerelemente,

Mehr

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ IBBB 2010 Workshop 6 Einführung in die objektorientierte Programmierung Dozenten: J. Penon, J. Frank, A. Schindler Teil: Java mit BlueJ Dozent: A. Schindler Einf. i. d. OOP - Java u. BlueJ / A. Schindler

Mehr

Hinweise zum Übungsblatt Formatierung von Text:

Hinweise zum Übungsblatt Formatierung von Text: Hinweise zum Übungsblatt Formatierung von Text: Zu den Aufgaben 1 und 2: Als erstes markieren wir den Text den wir verändern wollen. Dazu benutzen wir die linke Maustaste. Wir positionieren den Mauszeiger

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Zahlen auf einen Blick

Zahlen auf einen Blick Zahlen auf einen Blick Nicht ohne Grund heißt es: Ein Bild sagt mehr als 1000 Worte. Die meisten Menschen nehmen Informationen schneller auf und behalten diese eher, wenn sie als Schaubild dargeboten werden.

Mehr

Beispiel des Zusammenführens der APV- Tabellen Stammdaten und Verlaufsdaten mithilfe von Access

Beispiel des Zusammenführens der APV- Tabellen Stammdaten und Verlaufsdaten mithilfe von Access Beispiel des Zusammenführens der APV- Tabellen Stammdaten und Verlaufsdaten mithilfe von Access Diese Übersicht stellt die Zusammenführung der APV Tabellen Stammdaten und Verlaufdaten mithilfe der Datenbank

Mehr

Dokumentation Schedulingverfahren

Dokumentation Schedulingverfahren Dokumentation Schedulingverfahren von Norbert Galuschek Gordian Maugg Alexander Hahn Rebekka Weissinger June 23, 2011 1 Contents 1 Aufgabe 3 2 Vorgehensweise 4 2.1 Warum Android.......................

Mehr

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

Sie können diesen Service verwenden, um fast beliebig große Dateien auch über 2 GB zu versenden. 1 Informationen zum F*EX Service von BelWü Sie können diesen Service verwenden, um fast beliebig große Dateien auch über 2 GB zu versenden. 2 Registrierung für den Service Auf fex.belwue.de finden Sie

Mehr

Der lokale und verteilte Fall

Der lokale und verteilte Fall Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf

Mehr

Abwesenheitsnotiz im Exchange Server 2010

Abwesenheitsnotiz im Exchange Server 2010 Abwesenheitsnotiz im Exchange Server 2010 1.) Richten Sie die Abwesenheitsnotiz in Outlook 2010 ein und definieren Sie, an welche Absender diese gesendet werden soll. Klicken Sie dazu auf Datei -> Informationen

Mehr

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

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu]) 3.7 Erstellen einer Collage Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu]) Dann Größe des Dokuments festlegen beispielsweise A4 (weitere

Mehr

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler Downloadfehler in DEHSt-VPSMail Workaround zum Umgang mit einem Downloadfehler Downloadfehler bremen online services GmbH & Co. KG Seite 2 Inhaltsverzeichnis Vorwort...3 1 Fehlermeldung...4 2 Fehlerbeseitigung...5

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Dokumentation des Projektes Tic Tac Toe

Dokumentation des Projektes Tic Tac Toe Praktikum aus Programmierung Dr. Michael Hahsler Dokumentation des Projektes Tic Tac Toe 0050230 1 Java Projekt: Tic Tac Toe 1. Inhaltsverzeichnis 1. Inhaltsverzeichnis... 2 2. Problemdefinition... 2 3.

Mehr

Text Formatierung in Excel

Text Formatierung in Excel Text Formatierung in Excel Das Aussehen des Textes einer oder mehrerer Zellen kann in Excel über verschiedene Knöpfe beeinflusst werden. Dazu zuerst die betroffenen Zelle(n) anwählen und danach den entsprechenden

Mehr

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland OECD Programme for International Student Assessment Deutschland PISA 2000 Lösungen der Beispielaufgaben aus dem Mathematiktest Beispielaufgaben PISA-Hauptstudie 2000 Seite 3 UNIT ÄPFEL Beispielaufgaben

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 13 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X SwissMacMeeting #1 26. Juni 2004 Messeturm Basel http://mac.naepflin.com Was ist das Ziel dieses Kurses? Starthilfe Einblick in die Möglichkeiten,

Mehr

WhiteStarUML Tutorial

WhiteStarUML Tutorial WhiteStarUML Tutorial Autor: Simon Balázs, BME IIT, 2015. Übersetzung: Kovács Márton, 2015. Installation Herunterladen und installieren Sie das WhiteStarUML: http://sourceforge.net/projects/whitestaruml/

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Viele Bilder auf der FA-Homepage

Viele Bilder auf der FA-Homepage Viele Bilder auf der FA-Homepage Standardmäßig lassen sich auf einer FA-Homepage nur 2 Bilder mit zugehörigem Text unterbringen. Sollen es mehr Bilder sein, muss man diese als von einer im Internet

Mehr

Bilder zum Upload verkleinern

Bilder zum Upload verkleinern Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr

Mehr

Java Projekt: Tic Tac Toe + GUI

Java Projekt: Tic Tac Toe + GUI Java Projekt: Tic Tac Toe + GUI Rechnerpraktikum aus Programmierung im WS 2005/06 unter der Leitung von Dr. Michael Hahsler Tadeh Amirian (h0253821) 10.01.2006 1) Problemdefinition Beim TicTacToe Spiel

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung

CAQ Software für Ihr Qualitätsmanagement. Ablauf für die Erfassung der Fehler in der Fertigung Ablauf für die Erfassung der Fehler in der Fertigung Voraussetzung ist die Zuordnung der Erzeugnisse zu Produktgruppen. Wie das funktioniert ist der Anleitung Neue Produktgruppe anlegen und mit Erzeugnissen

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr