einf hrung in die programmierung mit java n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Einführung in die Programmierung mit Java PowerPoint Presentation
Download Presentation
Einführung in die Programmierung mit Java

Loading in 2 Seconds...

play fullscreen
1 / 34

Einführung in die Programmierung mit Java - PowerPoint PPT Presentation


  • 90 Views
  • Uploaded on

Einführung in die Programmierung mit Java. 12. Vorlesung WS-03/04. Mein Malprogramm Smile. Mein Malprogramm Smile. Anwendungsmenü : JMenuBar + JMenu + JMenuItem. Funktionsknöpfe : JToolBox + JToggleButton. Leinwand zum Bemalen: JPanel. javax.swing.JMenuBar das Anwendungsmenü.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Einführung in die Programmierung mit Java' - freja


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
mein malprogramm smile
Mein MalprogrammSmile

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

mein malprogramm smile1
Mein MalprogrammSmile

Anwendungsmenü : JMenuBar + JMenu + JMenuItem

Funktionsknöpfe : JToolBox + JToggleButton

Leinwand zum Bemalen:

JPanel

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenubar das anwendungsmen
javax.swing.JMenuBardas Anwendungsmenü
  • Kann allen Swing-Form-Komponenten hinzugefügt werden
  • Swing-Form-Komponenten sind:JFrame, JApplet, JPanel, JInternalFrame und Jdialog
  • Form-Komponenten können genau eine sichtbare JMenuBar besitzen, alle anderen werden verdeckt.
  • Ein JMenuBar kann Komponenten von Typ JMenu aufnehmen

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenubar menupunkte hinzuf gen
javax.swing.JMenuBarMenupunkte hinzufügen

öffnen durch Klick mit rechter Maustaste

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenu der titel des men s
javax.swing.JMenuder Titel des Menüs

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenu hinzuf gen von men punkten
javax.swing.JMenuhinzufügen von Menüpunkten

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenuitem ein einfacher men punkt
javax.swing.JMenuItemein einfacher Menüpunkt

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jmenuitem men punkte mit aktionen verbinden
javax.swing.JMenuItemMenüpunkte mit Aktionen verbinden

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jpanel die zeichenfl che
javax.swing.JPaneldie Zeichenfläche
  • Anlegen :
  • Über das Menü (in Forte):
    • Datei -> Neu
    • im sich öffenden Fenster „Templates“ den Ordner „Swing Forms“ öffnen und „JPanel“ auswählen und weiter mit Next
    • den Namen eingeben (, eventuell das Package (Verzeichnis) in dem die neu Klasse liegen soll auswählen) und mit Finish das Erzeugen abschließen
    • es öffnet sich automatisch die Forte-Umgebung „GUI Editing“

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jpanel die zeichenfl che1
javax.swing.JPaneldie Zeichenfläche
  • JPanel sind einfache Oberflächen
  • JPanel sind keine Anwendung
  • JPanel können andere Komponenten aufnehmen
  • JPanel haben ein Layoutz.B. ein BorderLayout

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

malen auf einem jpanel
Malen auf einem JPanel

Nötig ist das Überschreiben (siehe Polymorphie) der Methode :

...

publicvoid paintComponent( java.awt.Graphics g){

super.paintComponent( g);

...

}

Wichtig, da nur dann sämtliche Einstellungen die in Attributen der Klasse JPanel gespeichert sind berücksichtigt werden

Der Grafikkontext der Oberfläche

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

malen auf einem jpanel1
Malen auf einem JPanel

Beispiel : malt einen Kreis und einen Text

public class Leinwand extends JPanel {

publicvoid paintComponent( java.awt.Graphics g){

super.paintComponent( g);

java.awt.Graphics2D g2d = (java.awt.Graphics2D) g;

g2d.drawOval( 13 , 12 , 14 , 14 );

g2d.setColor( new java.awt.Color( 0, 0, 255));

g2d.setStroke( new java.awt.BasicStroke(2));

g2d.drawString( “Mein Text“ , 80 , 80 );

...

}

}

// malt einen Kreis

// ändern der Malfarbe

// ändern der Stricheigenschaften

// einen Text ausgeben

Zugriff auf den erweiterten Grafikkontext  mehr Funktionen

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

jpanel zur anwendung hinzuf gen
JPanel zur Anwendung hinzufügen

public class Smile extends javax.swing.JFrame{

public Leinwand leinwand;//Leinwand extends JPanel {}

/** Creates new form Smile */

public Smile() {

leinwand = new Leinwand( );//Ein Leinwandobjekt erzeugen

//Den LayoutManager von Hand wählen

this.getContentPane().setLayout( new java.awt.BorderLayout());

//Das JPanel auf der Oberfläche anmelden

this.getContentPane().add( leinwand, java.awt.BorderLayout.CENTER);

//Initialisieren der mit Forte erzeugten Komponenten

initComponents();

}

...

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

die klasse polygon verbessern
die Klasse Polygon verbessern

public class Polygon {

private Punkt[] punkte;

public void hinzu( Punkt punkt){

if( punkte == null){

punkte = new Punkt[1];

}

else{

Punkt[] neu = new Punkt[ punkte.length + 1];

for( int i = 0; i < punkte.length; i++){

neu[i] = punkte[i];

}

punkte = neu;

}

punkte[ punkte.length – 1] = punkt;

}

...

}

  • Problemeaufgrund des Arrays :
  • hoher Zeitaufwand bei dynamischem hinzufügen oder löschen von Punkten

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

die klasse polygon verbessern1
die Klasse Polygon verbessern
  • Problemeaufgrund des Arrays:
  • hoher Zeitaufwand bei dynamischem hinzufügen oder löschen von Punkten
  • besser für diese Aufgaben :
  • Listen verwenden ( Diskrete Mathe):
    • entweder selbst schreiben ( siehe Vorlesung 11)
    • oder vorgefertigte Klassen nutzen (z.B. java.util.LinkedList oder javax.swing.DefaultListModel)

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing defaultlistmodel ablegen von objekten in listen
javax.swing.DefaultListModelAblegen von Objekten in Listen

import javax.swing.DefaultListModel;

public class Polygon {

private DefaultListModel punkte;

public void hinzu( Punkt punkt){

if( punkte == null){

punkte = new DefaultListModel();

}

punkte.addElement( punkt);

}

...

}

public void addElement(Object object){

...

}

ist Methode der Klasse DefaultListModel, mit ihr kann ein Objekt am Ende der Liste hinzugefügt werden.

Wichtig : ALLE Klassen sind von Object abgeleitet !

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing defaultlistmodel durchlaufen einer liste
javax.swing.DefaultListModeldurchlaufen einer Liste

import javax.swing.DefaultListModel;

import java.util.Enumeration

public class Polygon {

private DefaultListModel punkte;

public void ausgabe(){

Enumeration laeufer = punkte.elements();

while( laeufer.hasMoreElements()){

((Punkt) laeufer.nextElement()).ausgeben();

}

}

...

}

// Zugriff öffnen

// solange noch nicht alle Objekte abgefragt wurden

// ein Objekt abfragen und behandeln

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

eigene grafikobjekte
eigene Grafikobjekte

java.awt.Rectangle

java.awt.Point

public class Punkt extends Point { }

public class Ellipse { }

public class Rechteck extends Rectangle { }

sollen alle eine Methode

public void zeichen_auf( java.awt.Graphics2D g2d){ ... }

haben ...

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

eine eigene grafikobjektschnittstelle
eine eigene Grafikobjektschnittstelle

java.awt.Rectangle

java.awt.Point

public class Punkt extends Point { }

public class Ellipse { }

public class Rechteck extends Rectangle { }

public abstract class GrafikObjekt {

public abstract void zeichnen_auf( java.awt.Graphics2D g2d);

}

müsste mittels extends eingebunden werden.

Es ist aber nur eine Oberklasse je Klasse erlaubt =>

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

eine eigene grafikobjektschnittstelle1
eine eigene Grafikobjektschnittstelle

Lösung :

java.awt.Rectangle

java.awt.Point

public class Punkt extends Point

implements GrafikObjekt { }

public class Ellipse implements GrafikObjekt { }

public class Rechteck extends Rectangle implements GrafikObjekt { }

public interface GrafikObjekt {

public void zeichnen_auf( java.awt.Graphics2D g2d);

}

eine Klasse kann zusätzlich zum erweitern der Oberklasse beliebig viele Interfaces implementieren !

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

das interface an sich
das Interface an sich

Syntax :

jedes Interface hat eine eigene Interfacename.java - Datei!

public interface Interfacename {

public void methodenname( parameter);

...

}

  • Ein Interface darf nur :
  • abstrakte Methoden und
  • statische Attribute enthalten !
  • Ein Interface kann nicht :
  • instanziiert werden !

Beispiel :

public interface GrafikObjekt {

public void zeichnen_auf( java.awt.Graphics2D g2d);

...

}

das Schlüsselwort abstract wird nicht benötigt !

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

ein interface erweitern
ein Interface erweitern

Syntax :

public interface Interfacename extends Interface_1 (, Interface_2 ...){

public void methodenname( parameter);

...

}

  • Ein Interface darf :
  • beliebig viele Interfaces als Oberklasse haben !

Beispiel :

public interface FarbObjekt extends GraphikObjekt {

public void farbe_aendern( java.awt.Color color);

...

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

ein interface implementieren
ein Interface implementieren

Syntax :

public class Klassenname implementsInterface_1 (, Interface_2 ...){

...

}

  • Eine Klasse die ein Interface implementiert muss :
  • abstrakt sein oder
  • alle Methoden des Interfaces implementieren

Beispiel :

public class Kreis implements GrafikObjekt {

public void zeichen_auf( java.awt.Graphics2D g2d){

g2d.drawOval( this.x, this.y, this.radius, this.radius);

}

...

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

eigene grafikobjekte darstellen durchlaufen einer liste
eigene Grafikobjekte darstellendurchlaufen einer Liste

import javax.swing.*;

import java.util.Enumeration;

public class Leinwand extends JPanel {

public DefaultListModel grafik_objekte;

publicvoid paintComponent( java.awt.Graphics g){

super.paintComponent( g);

java.awt.Graphics2D g2d = (java.awt.Graphics2D) g;

Enumeration laeufer = grafik_objekte.elements();

while(laeufer.hasMoreElements()){

GrafikObjekt go = (GrafikObjekt) laeufer.nextElement()

go.zeichen_auf( g2d);

}

}

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

grafikobjekte auf mausklick
Grafikobjekte auf Mausklick

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

grafikobjekte auf mausklick1
Grafikobjekte auf Mausklick

import javax.swing.*;

import java.util.Enumeration;

public class Leinwand extends JPanel {

public Smile parent;

public DefaultListModel grafik_objekte;

private void formMouseClicked(java.awt.event.MouseEvent evt) {

// Add your handling code here:

grafik_objekte.addElement( new Kreis( evt.getX(), evt.getY(), 10));

parent.repaint(),

}

...

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

die klasse kreis
Die Klasse Kreis

public class Kreis implements GraphikObjekt {

public doubel radius, x, y;

public Kreis( double x, double y, double radius) {

this.x = x;

this.y = y;

this.radius = radius;

}

public void zeichen_auf(java.awt.Graphics2D g2d) {

g2d.drawOval(x, y, radius, radius);

}

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jtoolbar
javax.swing.JToolBar
  • ist automatisch mit BoxLayout ausgestattet
  • kann im laufenden Programm neu platziert werden

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

javax swing jtogglebutton
javax.swing.JToggleButton
  • hat zwei Zustände : ausgewählt und nicht ausgewählt
  • Zustand kann mit der Methode public boolean isSelected() abgefragt werden
  • Zustand wird beim Anklicken der Komponente gewechselt
  • drücken kann als Event mit hinzugefügt werden (bei Forte mittels ActionsActionEventactionPerformed)

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

erzeugen von kreisen an und abschalten erster teil
erzeugen von Kreisenan- und abschalten (erster Teil)

import javax.swing.*;

public class Smile extends JFrame {

public boolean kreise_erzeugen() {

return( jToggleButton1.isSelected());

}

...

private JToggleButton jToggleButton1;

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

erzeugen von kreisen an und abschalten zweiter teil
erzeugen von Kreisenan- und abschalten (zweiter Teil)

import javax.swing.*;

import java.util.Enumeration;

public class Leinwand extends JPanel {

public Smile parent;

public DefaultListModel grafik_objekte;

private void formMouseClicked(java.awt.event.MouseEvent evt) {

// Add your handling code here:

if( parent.kreise_erzeugen() == true)

grafik_objekte.addElement( new Kreis( evt.getX(), evt.getY(), 10);

parent.repaint();

}

...

}

Leinwand besitzt folgenden Konstruktor :

public Leinwand( Smile parent) {

this.parent = parent;

grafik_objekte = new DefaultListModel();

}

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

bungsaufgabe
Übungsaufgabe

Baut ein Malprogramm, das einem Menü, eine Toolbar mit einem ToggleButton und einer Leinwand besteht.

Die Klasse Leinwand soll von JPanel abgeleitet sein und die Methode paintComponent( java.awt.Graphics g){...} überschreiben.

Beim Start des Malprogramms soll auf der Leinwand ein Kreis gemalt werden. Wenn dieses funktioniert versucht mal einen Smily, ein Gesicht oder etwas anderes.

Ihr könnt auch probieren, die Ausgabe mit dem ToggleButton an und ab zu schalten ...

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

hausaufgabe
Hausaufgabe
  • Versucht, das Malprogramm aus der Vorlesung zu schreiben. Hierfür könnt ihr viele Klassen aus der Übung nutzen.
  • Neu :
    • Die Schnittstelle GrafikObjekt
    • und die Klassen die diese implementieren (z.B. Kreis),
    • sowie die Benutzung von DefaultListModel um die GrafikObjekte zu speichern, die gleichzeitig mit einer Änderung der paintComponent() Methode der Leinwand verbunden ist !

IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04