Einführung in die Programmierung mit Java

Werbung
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 Java
11. Vorlesung WS-03/04
Der Nullpointer
Schlüsselwort :
null
Einsatz :
• kann jeder Referenzvariable (= Variable/Attribut von Typ einer
Klasse) zugewiesen werden
• ist die „default“-Referenz einer Referenzvariable
• hat keine Methoden oder Attribute
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Der Nullpointer
- Beispiel 1 zur Nutzung public class Polygon {
Punkt[ ] part = null;
public void resize( int length){
if( part == null){
part = new Punkt[length];
}
else{
Punkt[] neu = new Punkt[length];
if( length > part.length){
length = part.length;
}
for( int i = 0; i < length; i++){
neu[i] = part[i];
}
part = neu;
}}}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Der Nullpointer
- Beispiel 2 zur Nutzung public class ListElement {
Object wert;
ListElement naechster = null;
public ListElement( Object wert){
this.wert = wert;
}
public void fuege_an( Object wert){
ListElement weiter = this;
while( weiter.naechster != null){
weiter = weiter.naechster;
}
weiter.naechster = new ListElement( wert);
}
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Der Nullpointer
- Beispiel 2 zur Nutzung public class ListElement {
...
public Object gib_Wert_von( int id)
throws ArrayIndexOutOfBoundsException {
ListElement weiter = this;
while( id > 0){
weiter = weiter.naechster;
if( weiter == null){
throw( new ArrayIndexOutOfBoundsException());
}
id--;
}
return( weiter.wert);
}}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Graphical User Interface‘s
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
eigenständige Anwendungen
javax.swing.JFrame
Anlegen :
Über das Menü (in Forte):
1. Datei -> Neu
2. im sich öffenden Fenster „Templates“ den Ordner
„Swing Forms“ öffnen und „JFrame“ auswählen und
weiter mit Next
3. den Namen eingeben (, eventuell das Package
(Verzeichnis) in dem die neu Klasse liegen soll
auswählen) und mit Finish das Erzeugen abschließen
4. es öffnet sich automatisch die Forte-Umgebung „GUI
Editing“
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
GUI Editing
Explorer [Filesystem]
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
GUI Editing
Source Editor
schreib geschützter
Bereich
Der Quellcode: Klasse.java
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
GUI Editing
Component
Inspector
die Eigenschaften
der selektierten
Komponente
zur ausgewählen
Form gehörende
grafische
Komponenten
z.B. Buttons
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
GUI Editing
GUI Komponentengruppen
Layouts und Rahmen
Auswahlobjekte,
sie können durch anklicken des Symbols
und dann anklicken des Form-Fensters
der Oberfläche hinzugefügt werden
Form
Darstellung des
Aussehens der
Oberfläche
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Layout Manager
ohne Layout Manager :
Aktion :
Hinzufügen eines Buttons
Aussehen :
Anwendung
Anwendung
Button 1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Layout Manager
ohne Layout Manager :
Aktion :
Hinzufügen eines weiteren Buttons
Aussehen :
Anwendung
Button 1
Anwendung
Button 2
ungünstig !!
wegen der Überlagerung
von Button 1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Layout Manager
Layout Manager entscheiden über die Anordnung von Komponenten
auf der zugehörigen Oberfläche
Beispiele :
NORTH
java.awt.BorderLayout
WEST
CENTER
SOUTH
java.awt.GridLayout
[0,0]
[0,1]
[1,0]
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
EAST
eine Oberfläche mit Layout
Beispiel :
Button 2
NORTH
java.awt.BorderLayout
WEST
Button 1
SOUTH
Darstellung :
Button 2
Button 1
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
EAST
das Layout bestimmen
verfügbare Layouts
aktives Layout
1. neues Layout wählen
2. auf das Form-Fenster
klicken
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Darstellen von Text
javax.swing.JLabel
1. auf das JLabelsymbol klicken
2. auf das FormFenster klicken
Der Nutzer hat keinen direkten Zugriff
auf den Text
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Eingabe und darstellen von Text
javax.swing.JTextField
1. auf das JTextFieldsymbol klicken
2. auf das FormFenster klicken
Der Nutzer hat direkten Zugriff
auf den Text
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Komponenten als Attribute
public class Beispiel extends javax.swing.JFrame {
/** Creates new form Beispiel */
public Beispiel() {
initComponents();
der Konstruktor
}
...
// Variables declaration - do not modify
private javax.swing.JTextField jTextField1;
// End of variables declaration
eine graphische Komponente
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Komponenten als Attribute
public class Beispiel extends javax.swing.JFrame {
...
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
jTextField1 = new javax.swing.JTextField();
...
jTextField1.setText("jTextField1");
getContentPane().add( jTextField1, java.awt.BorderLayout.CENTER);
pack();
}
...
Initialisieren der Oberfläche und ihrer Elemente
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Komponenten als Attribute
public class Beispiel extends javax.swing.JFrame {
...
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
Anweisungen die beim Schließen
}
der Oberfläche bearbeitet werden
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new Beispiel().show();
die Main-Methode zum Starten
}
der GUI-Anwendung
...
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Aktionen starten
javax.swing.JButton
Ein Button den man
drücken kann.
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
javax.swing.JButton
Ereignisse (=Events) mit Aktionen verbinden
Ereignis = drücken des
Buttons
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
javax.swing.Jbutton
ActionListener
Was soll im Fall eines Ereignisses
(=drücken von Button 1) gemacht werden ??
Anweisungen
die ausgeführt werden
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Action auf Knopfdruck
Beispiel: Knopftitel invertieren
public class Beispiel extends javax.swing.JFrame {
...
/** Exit the Application */
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String text = jButton1.getText();
char[] inhalt = text.toCharArray();
text = ““;
for( int i = inhalt.length - 1; i >= 0; i--){
text += inhalt[i];
}
jButton1.setText( text);
}
...
}
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Reaktionen auf die Maus
Beispiel: Fluchtframe
Sobald die Jlabel-Komponente mit dem
Mauszeiger berührt wird, soll die ganze
Oberfläche flüchten
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Reaktionen auf die Maus
Beispiel: Fluchtframe
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Reaktionen auf die Maus
Beispiel: Fluchtframe
public class Beispiel extends javax.swing.JFrame {
...
/** Exit the Application */
private void jLabel1MouseEntered( java.awt.event.MouseEvent evt){
java.awt.Point mouse_location = evt.getPoint();
mouse_location.translate(this.getX() + 40, this.getY() +40);
this.setLocation(mouse_location);
}
...
}
verschieben der
Anwendung an
die neue Position
auslesen der
Mausposition
bestimmen
der neuen
Position der
Anwendung
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Übungsaufgabe
Buttontexter
Erstelle eine Anwendung, die aus einem Textfeld für Eingaben
(JTextField) und einem Knopf (JButton) besteht. Alle beide müssen
gleichzeitig sichtbar sein.
Auf Knopfdruck soll der Text aus dem Textfeld auf dem Button
erscheinen.
Probiert aus, was ihr mit den „Properties/Eigenschaften“ bei den
Komponenten alles anrichten könnt.
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Hausaufgabe
Währungsrechner
Erstelle eine Anwendung, die aus einem Textfeld für Eingaben
(JTextField), einem Textfeld für Anzeigen (JLabel) und einem Knopf
(JButton) besteht. Alle drei müssen gleichzeitig sichtbar sein.
Auf Knopfdruck soll der im Textfeld eingegebene Wert von Euro in
Dollar umgerechnet und im anderen Textfeld angezeigt werden.
IKG
WS03/04
IKG;Dörschlag,
Dörschlag,Plümer,
Plümer,Gröger
Gröger;„Einführung
Einführungin
indie
dieProgrammierung
Programmierungmit
mitJava“
Java WS03/04
Herunterladen