Ein Beispiel in Java.

Slides:



Advertisements
Ähnliche Präsentationen
Ein Beispiel in Java.
Advertisements

Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Java: Programmierung grafischer Oberflächen
Java: Objektorientierte Programmierung
Java: Programmierung grafischer Oberflächen
Java: Grundlagen der Objektorientierung
Vererbung.
MVC.
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
Abstrakte Klassen.
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Grafische Benutzeroberfläche
Wie überwacht man Objekte im "Alltag" ?. Indem man "Wanzen" an diese anbringt.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
AWT – Detailbetrachtung Java 3D – Seminar im Wintersemester 2002/2003 Christian Schneider.
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Einführung in Java1 Einführung in JAVA.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
SWING DVG Swing.
03 - Paint Das Zeichenprogramm EMMA Paint2 Aufgabenstellung Entwicklung eines ausschließlich in JAVA programmierten Graphikprogrammes. Vergleichsprodukte:
Klassen 02 - Klassen.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Step by step zum JFrame 1 Zum JFrame Step by step by step by step by step by step by step by step by.
© 2005 Pohlig GK Informatik K Zum JFrame Step by step by step by step by step by step by step by step by.
© 2006 MPohlig Grundkurs Informatik mit Java 1 JFrame-Vorlage Step by step by step by step by step by step by step by step by.
© 2004 Pohlig - Taulien Swing Ereignissteuerung. © 2004 Pohlig - Taulien GK Informatik mit Java 2 Auf Button-Klick reagieren.
© 2005 Pohlig – Taulien: Die Matheamatik-GUI als Applet Come Together 1 April 2005 Was ist ein Applet Ein Applet ist ein Javaprogramm, das die VM benutzt,
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Objektorientierte Modellierung
Erste Schritte mit Eclipse Neues Projekt erstellen (1)
AWT und JFC Abstract Windowing Toolkit
Java: Programmierung grafischer Oberflächen
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Informatik – Programmierpraktikum Alexander Volodarski Gruppe 14
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Objektorientiertes Konstruieren
Variablenkonzept Klassisch, in Java Basistyp
Programmiervorkurs WS 2014/15 Instanzmethoden
© 2005 Pohlig Informatik Jg. 11 mfH Michael Pohlig 1 Zum JFrame Step by step by step by step by step by step by step by step by.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
GUI Programmierung in Java Branimir Djordjevic. GUI - Wichtige Begriffe -  Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Wie überwacht man Objekte im "Alltag" ?
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Grundkurs Informatik 11-13
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
 Präsentation transkript:

Ein Beispiel in Java

import javax.swing.*; // GUI Komponente import java.awt.*; // Layouts import java.awt.event.*; // Ereignisse public class MainListener1 { public static void main(String[] args) { MyFenster myfObj = new MyFenster(); myfObj.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); } Hier wird ein Objekt, also myfObj, der selbstgebastelten Klasse MyFenster erzeugt, d.h. auf den Bildschirm gebracht Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn Fenster weggeklickt wird. Nachprüfen mit Task-Manager

class MyFenster extends JFrame { private Container mycont; private JPanel mypan; private JButton myb; private MyWanze myw; public MyFenster() { mycont = getContentPane(); mypan = new JPanel(); myb = new JButton("Bitte klick hier drauf"); myw = new MyWanze(); // weiter mit nächster Folie Variablen (Objekte) deklarieren Speicher für die eben deklarierten Variablen reservieren

myb.addActionListener(myw); mypan.add(myb); mycont.add(mypan); setTitle("Ein Klick-Test"); setLocation(100,200); setSize(400,200); setVisible(true); } Eine Wanze an das Button myb anbringen Den Button myb an das Panel mypan montieren Das Panel mypan an das Objekt mycont montieren

class MyWanze implements ActionListener { public MyWanze(){ } public void actionPerformed (ActionEvent ae) { System.out.println("Ich wurde angeklickt"); Das zum Ereignis (z.B. Mausklick) erzeugte Ereignis-Objekt wird der passenden Methode übergeben und kann dort verwendet werden Hier wird das Ereignis-Objekt ae nicht verwendet. Doch könnten die sich in ae befindlichen Informationen (z.B. Koordinaten der Maus) in dieser Methode verwendet werden.

Was haben wir bis jetzt gemacht (anschaulich beschrieben)?

Anlegen des Objekts myfObj Anlegen des Objekts myb (Button) innerhalb von myfObj Anlegen des Objekts myw innerhalb von myfObj myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Wanze an den Button nageln myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Mausklick erzeugt (von der JVM) ein ActionEvent Objekt, das der aufgerufenen Methode actionPerformed(...) übergeben wird ActionEvent Objekt myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Wie kann man durch einen Mausklick auf den Button (oder irgend ein anderes grafisches Element des Fensters) die Hintergrundfarbe des Buttons blau machen?

Die Methode actionPerformed( Die Methode actionPerformed(...) muss beim Mausklick die Hintergrundfarbe auf blau setzen. ActionEvent Objekt myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Die Methode actionPerformed( Die Methode actionPerformed(...) muss beim Mausklick die Hintergrundfarbe auf blau setzen. ActionEvent Objekt myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Ein Button hat zwar die Methode setBackground(. ), mit der man z. B Ein Button hat zwar die Methode setBackground(...), mit der man z.B. die Farbe blau setzen kann: setBackground(Color.blue). Welches Problem gibt es, wenn man dies innerhalb von actionPerformed(...) machen will? myf myb myw void actionPerformed (ActionEvent ae){ ... }

Die Methode actionPerformed( Die Methode actionPerformed(...) befindet sich innerhalb des Objekts myw und kann deshalb nicht auf das außerhalb liegende Objekt myb zugreifen. myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Was kann man machen um innerhalb von myw auf myb (besser noch auf das ganze Fenster myfObj) zugreifen zu können? myfObj myb myw void actionPerformed (ActionEvent ae){ ... }

Man muss myw noch einen Verweis (Pointer) auf myfObj spendieren (als Attribut = Datenmember). myb myw private MyFenster myf; void actionPerformed (ActionEvent ae){ ... }

Welche Anweisung realisiert in welcher Methode diesen Verweis? myfObj myb myw private MyFenster myf; void actionPerformed (ActionEvent ae){ ... }

Beim Anlegen des Objekts myw, also im Konstruktor von MyWanze, bekommt dieser Konstruktor als Parameter myfObj übergeben. myfObj myb myw private MyFenster myf; public MyWanze(MyFenster f){ myf = f; } void actionPerformed (ActionEvent ae){ ... }

Jetzt endlich kann man in der Methode actionPerformed in aller Ruhe über myf auf myfObj zugreifen! myb myw private MyFenster myf; public MyWanze(MyFenster f){ myf = f; } void actionPerformed (ActionEvent ae){ myf.myb.setBackground(Color.blue); }

myf.myb.setBackground(Color.blue); Warum befindet sich noch ein Fehler in der folgenden Anweisung? myf.myb.setBackground(Color.blue); myfObj myb myw private MyFenster myf; public MyWanze(MyFenster f){ myf = f; } void actionPerformed (ActionEvent ae){ myf.myb.setBackground(Color.blue); }

Da myb in MyFenster private ist, funktioniert natürlich myf. myb nicht Da myb in MyFenster private ist, funktioniert natürlich myf.myb nicht. Dies wurde hier nur aus didaktischen Gründen gemacht. Deshalb muss hier natürlich eine get-Methode benutzt werden. myfObj myb myw private MyFenster myf; public MyWanze(MyFenster f){ myf = f; } void actionPerformed (ActionEvent ae){ myf.myb.setBackground(Color.blue); }

Ein Problem gibt es noch:

Erzeugen des Objekts myfObj ... Wie kann das Objekt myfObj dem Konstruktor von MyWanze sich selbst als Parameter übergeben? ... nach diesem Bauplan Erzeugen des Objekts myfObj ... MyFenster myfObj = new MyFenster(); class MyFenster extends JFrame { ... private MyWanze myw; public MyFenster() { myb = new JButton("Bitte klicke mich"); myw = new MyWanze( ); }

Warum funktioniert das nicht? MyFenster myfObj = new MyFenster(); class MyFenster extends JFrame { ... private MyWanze myw; public MyFenster() { myb = new JButton("Bitte klicke mich"); myw = new MyWanze(myfObj); }

Weil im Bauplan nicht schon der Name des Objekts stehen kann, das irgendein Programmierer später (nach der Erstellung) des Bauplans) dem Objekt beim Anlegen mit new .. vergibt! MyFenster myfObj = new MyFenster(); class MyFenster extends JFrame { ... private MyWanze myw; public MyFenster() { myb = new JButton("Bitte klicke mich"); myw = new MyWanze(myfObj); }

Der Zugriff innerhalb einer Methode eines Objekts auf das Objekt selbst geschieht mit dem Bezeichner this. In dem Fall hier wird mit this das Objekt myfObj an den Parameter desKonstrutors von myWanze übergeben. MyFenster myfObj = new MyFenster(); class MyFenster extends JFrame { ... private MyWanze myw; public MyFenster() { myb = new JButton("Bitte klicke mich"); myw = new MyWanze(this); }

Implementierung dieses Beispiels: (Veränderungen zum letzten Programm MainListener1, das nicht die Hintergrundfarbe ändert, werden blau angezeigt)

import javax.swing.*; // GUI Komponente import java.awt.*; // Layouts import java.awt.event.*; // Ereignisse public class MainListener2 { public static void main(String[] args) { MyFenster myfObj = new MyFenster(); myf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); } Hier wird ein Objekt, also myf, der selbstgebastelten Klasse MyFenster erzeugt, d.h. auf den Bildschirm gebracht Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn Fenster weggeklickt wird. Nachprüfen mit Task-Manager

Variablen (Objekte) deklarieren class MyFenster extends JFrame { private Container mycont; private JPanel mypan; private JButton myb; private MyWanze myw; public MyFenster() { mycont = getContentPane(); mypan = new JPanel(); myb = new JButton("Bitte klicke mich"); myw = new MyWanze(this); Variablen (Objekte) deklarieren Speicher für die eben deklarierten Variablen reservieren mit this wird das durch den Aufruf des Konstruktors MyFenster soeben erzeugte Objekt der Klasse MyFenster bezeichnet.

myb.addActionListener(myw); mypan.add(myb); mycont.add(mypan); setTitle("Ein Klick-Test"); setLocation(200,200); setSize(400,200); setVisible(true); } public JButton getMyb(){ return(myb); Eine Wanze an das Button myb anbringen Den Button myb an das Panel mypan montieren Das Panel mypan an das Fenster MyFenster montieren Liefert das Objekt myb zurück.

class MyWanze implements ActionListener { private MyFenster myf; public MyWanze(MyFenster f){ myf = f; } public void actionPerformed (ActionEvent ae){ myf.getMyb().setBackground(Color.blue); System.out.println("Ich wurde angeklickt"); Setzt die Hintergrundfarbe des Buttons myb auf blau. In dieser Methode muss auf den Button myb der Klasse MyFenster zugegriffen werden. Innerhalb der Klasse MyWanze geht das nur, wenn sich dieses Objekt als Attribut in der Klasse MyWanze befindet.

Während des Programmablaufs passiert also folgendes:

MyFenster myfObj = new MyFenster(); Das Objekt myfObj wird erzeugt und dabei der Konstruktor MyFenster() aufgerufen. myw = new MyWanze(this); MyWanze(myfObj) Innerhalb dieses Konstruktors MyFenster wird der Konstruktor MyWanze(this) aufgerufen. myf = myfObj; this ist das Objekt myfObj Im Konstruktor MyWanze wird die Anweisung ausgeführt. myfObj.getMyb().setBackground(Color.blue); damit wird also auf das Button myb im oben erzeugten Fenster myfObj zugegriffen !

Aufgabe: Verändern Sie das Programm so, dass sich bei jedem Klick auf das Button die Hintergrundfarbe von blau auf rot bzw. von rot auf blau ändert.