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