public class - Institut für Geodäsie und Geoinformation der

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
14. Vorlesung WS-03/04
Die letzte Hausaufgabe
Erweitern des Malprogramms
Schreib, eine Toolbar für Rechtecke, die das Selbe macht, wie die ToolBar für Ellipsen aus der
Vorlesung. (Folie 26 – 32)
Hinweis:
Hierfür müsst ihr eine extra Klasse Rechteck schreiben, welche das Interface GrafikObjekt
implementiert.
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
2
Die letzte Hausaufgabe
import java.awt.*;
class Rechteck implements GrafikObjekt {
// Attribute der Klasse Rechteck
int x, y, breite, hoehe;
Color farbe;
// Konstruktor der Klasse Rechteck
public Rechteck ( int x, int y, int breite, int hoehe) {
this.x = x;
this.y = y;
this.breite = breite;
this.hoehe = hoehe;
this.farbe = Color.BLACK;
}
public void zeichnen_auf( Graphics2D g2d) {
g2d.setColor( farbe);
g2d.drawRect( x, y, breite, hoehe);
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
3
Die letzte Hausaufgabe
import java.awt.*;
Methode des
Quellcode Ergänzungen
import java.util.*;
Buttons zeichnen
import javax.swing.*;
siehe letzte Vorlesung:
public class Smile extends JFrame {
die Ellipsentoolbar
private Leinwand display;
...
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
int x = Integer.parseInt( jTextfield5.getText());
int y = Integer.parseInt( jTextfield6.getText());
int breite = Integer.parseInt( jTextfield7.getText());
int hoehe = Integer.parseInt( jTextfield8.getText());
1. den Button mit einer
Methode versehen !
2. die Methode mit
Anweisungen füllen !
GraphikObjekt go = new Rechteck( x, y, breite, hoehe);
display.grafik_objekt_hinzufuegen( go);
this.repaint();
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
4
Mein Malprogramm
Smile+
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
5
GUI-Dialoge
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
6
Beispiel
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
7
Beispiel
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
8
GUI-Dialoge
anlegen
! Achtung !
es entsteht eine
extra Quellcodedatei
Die neue Klasse soll
Farbwahl heißen !!
Bei Forte gilt:
Dialoge können als
eigenständige Programme
gestartet werden
typische Aufgabe:
Abfragen von
Benutzereingaben
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
9
Den GUI-Dialog integrieren
1. Ein Menüpunkt zum Starten des
Dialoges anlegen
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
10
Den GUI-Dialog integrieren
1. Ein Menüpunkt zum Starten des
Dialoges anlegen
2. Den Menüpunkt über Events ->
Action -> actionPerformed eine
Methode zuordnen
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
11
Den GUI-Dialog integrieren
1. Ein Menüpunkt zum Starten des
Dialoges anlegen
2. Den Menüpunkt über Events ->
Action -> actionPerformed eine
Methode zuordnen
Die Klasse des Dialogs
== Dialogtyp
3. Die Methode ergänzen
public class Smile extends JFrame {
...
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
Farbwahl wahl = new Farbwahl( this, true);
wahl.show();
...
ein Dialog möchte immer wissen wem er gehört !
}
...
ein Dialog starten und anzeigen
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
12
GUI - Dialoge
modal oder nicht
public class Smile extends JFrame {
...
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
Farbwahl wahl = new Farbwahl( this, true);
wahl.show();
...
hier wird festgelegt ob der Dialog modal ist oder nicht
}
...
}
modal =
der Eigentümer des Dialogs wartet, bis dieser beendet wird und startet
erst dann mit den nächsten Anweisungen
typisches Beispiel:
Formatauswahl bei PowerPoint & Co
nicht modal =
der Eigentümer des Dialogs wartet nicht, bis dieser beendet
wird. Der Eigentümer kann parallel zum Dialog weiter genutzt werden.
typisches Beispiel:
Toolbars, z.B. Ellipsentoolbar
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
13
JDialog + JColorChooser
einen Dialog zur Farbwahl gestalten
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
14
JDialog + JColorChooser
einen Dialog zur Farbwahl gestalten
JButton JSeparator JButton
JPanel
mit GridLayout
(cols: 3; rows: 1)
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
15
einen Dialog zur Farbwahl
die Auswahl bestätigen
1. Dem Button über Events -> Action ->
actionPerformed eine Methode zuordnen
import javax.swing.*;
import java.awt.*;
public class Farbwahl extends JDialog {
static public Color farbe = Color.BLACK;
...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
die ausgewählte Farbe merken
farbe = jColorChooser1.getColor();
setVisible( false);
dispose();
den Dialog unsichtbar machen
}
...
und den Eigentümer freigeben
private JColorChooser jColorChooser1;
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
16
einen Dialog zur Farbwahl
die Auswahl abbrechen
1. Dem Button über Events -> Action ->
actionPerformed eine Methode zuordnen
import javax.swing.*;
import java.awt.*;
public class Farbwahl extends JDialog {
static public Color farbe = Color.BLACK;
...
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
setVisible( false);
dispose();
}
...
}
den Dialog unsichtbar machen
und den Eigentümer freigeben
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
17
Den Dialog nutzen
den neuen Ellipsen die gewählte Farbe geben
import java.awt.*;
Quellcode Ergänzungen
import java.util.*;
import javax.swing.*;
siehe letzte Vorlesung:
public class Smile extends JFrame {
die Ellipsentoolbar
private Leinwand display;
...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int x = Integer.parseInt( jTextfield1.getText());
int y = Integer.parseInt( jTextfield2.getText());
int breite = Integer.parseInt( jTextfield3.getText());
int hoehe = Integer.parseInt( jTextfield4.getText());
Ellipse go = new Ellipse( x, y, breite, hoehe);
go.farbe_setzen( Farbwahl.farbe);
display.grafik_objekt_hinzufuegen( go);
this.repaint();
Methode des
Buttons zeichnen
möglich, da farbe
statisch ist !
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
18
Das Klassenattribut farbe
1. Dem Button über Events -> Action ->
actionPerformed eine Methode zuordnen
import javax.swing.*;
import java.awt.*;
public class Farbwahl extends JDialog {
static public Color farbe = Color.BLACK;
...
Dieses Attribut ist nicht an ein Objekt sondern
an
private void jButton2ActionPerformed(java.awt.event.ActionEvent
evt) {
die Klasse
// Add your handling code
here: gekoppelt ( Klassenattribut ).
setVisible( false);
dispose();
}
...
Daher, sobald diese Klasse importiert/verfügbar
wird ist es ebenso verfügbar !
Abrufbar über:
Farbwahl.farbe
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
19
Dialog zum Strichart ändern
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
20
Dialog zum Strichart ändern
(Klasse BS_Dialog  extends JDialog)
Dialogoberfläche mit GridLayout rows:4 cols:2
JTextField
JLabel
JComboBox
JButton
bekommen Methoden über
Events Action actionPerformed
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
21
javax.swing.JComboBox
Auswahllisten
Ausgewähltes Element
Liste der
verfügbaren
Elemente
Auswahl 0
Auswahl 1
Auswahl 2
...
Knopf zum
Öffnen der
Auswahl
JComboBox
Jedes Element der Liste hat einen Index
(von 0 bis n-1)
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
22
javax.swing.JComboBox
Auswahllisten
Der Liste der verfügbaren Elemente (=Items) ein Element hinzufügen :
JComboBox meine_auswahl = new JComboBox();
meine_auswahl.addItem(“Auswahl 0“);
meine_auswahl.addItem(“Auswahl 1“);
meine_auswahl.addItem(“Auswahl 2“);
Auswahl 0
Auswahl 1
Auswahl 2
...
Index = 0
Index = 1
Index = 2
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
23
javax.swing.JComboBox
Auswahllisten
Der Liste der verfügbaren Elemente (=Items) ein Element hinzufügen :
JComboBox meine_auswahl = new JComboBox();
meine_auswahl.addItem(“Auswahl 0“);
meine_auswahl.addItem(“Auswahl 1“);
meine_auswahl.addItem(“Auswahl 2“);
Die Elemente (=Items) sind indiziert !
Das zuerst Hinzugefügte hat den Index 0
Das N-te den Index n-1 (im Beispiel den Index 2)
meine_auswahl.getSelectedIndex():int
Vom gewählten Element kann der Index in der
Liste oder der Wert z.B. “Auswahl 0“ abgefragt
werden !
meine_auswahl.getSelectedItem():Object
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
24
Die JComboBox mit Auswahl füllen
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
/** Creates new form BS_Dialog */
public BS_Dialog( java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.jComboBox1.addItem( "keine Ahnung");
this.jComboBox1.addItem( "Keine Deko");
this.jComboBox1.addItem( "Eckig");
this.jComboBox1.addItem( "Rund");
this.jComboBox2.addItem( "keine Ahnung");
this.jComboBox2.addItem( "direkt");
this.jComboBox2.addItem( "Schnitt");
this.jComboBox2.addItem( "abrunden");
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
25
Die Klasse java.awt.BasicStroke
zum Gestalten einfacher Linienarten
Konstruktoren ( hier interessante)
BasicStroke stroke = new BasicStroke( width);
BasicStroke stroke = new BasicStroke( width, cap, join);
...
Form des Linienendes (cap) :
1. butt
2. round
3. square
Form des Linienverbindung (join) :
1. bevel
2. miter
3. round
Strichstärke
(width)
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
26
Dialog zum Strichart ändern
(Klasse BS_Dialog  extends JDialog)
Dialogoberfläche mit GridLayout rows:4 cols:2
JTextField
JLabel
JComboBox
JButton
bekommen Methoden über
Events Action actionPerformed
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
27
Die Abbruch-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
setVisible(false);
dispose();
} ...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
28
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
Die OK-Button Aktion
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
if( jTextField1.getText() != null){
Ist die Strichstärke angegeben ?
if((jComboBox1.getSelectedIndex() > 0) &&
(jComboBox2.getSelectedIndex() > 0)){
int cap = this.jComboBox1.getSelectedIndex() - 1,
join = this.jComboBox2.getSelectedIndex() - 1;
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()),
cap, join);
}
ja, nur Strichstärke !
else{
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()));
}
}
nein ? – dann einfachste Strichart
else{
stroke = new BasicStroke();
}
setVisible(false);
dispose();
}
Die OK-Button Aktion
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
29
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
Die OK-Button Aktion
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
if( jTextField1.getText() != null){
Sind End- und Eckform
if((jComboBox1.getSelectedIndex() > 0) &&
angegeben ?
(jComboBox2.getSelectedIndex() > 0)){
int cap = this.jComboBox1.getSelectedIndex() - 1,
join = this.jComboBox2.getSelectedIndex() - 1;
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()), cap, join);
}
nur Strichstärke !
else{
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()));
}
}
else{
stroke = new BasicStroke();
}
setVisible(false);
dispose();
}
...
Die OK-Button Aktion
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
30
Die Änderungen in Smile
1. Ergänzung der JMenubar im ersten JMenu um ein neues JMenuItem
2. Verbinden des JMenuItem mit einer Methode über Events  Action 
actionPerformed
public class Leinwand extends JPanel {
...
private void jMenuItem2ActionPerformed( java.awt.event.ActionEvent evt) {
// Add your handling code here:
BS_Dialog bsd = new BS_Dialog( this, true);
bsd.show();
repaint();
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
31
Die Änderungen an Leinwand
public class Leinwand extends JPanel {
...
public void paintComponent(java.awt.Graphics g){
super.paintComponent( g);
java.awt.Graphics2D g2d = (java.awt.Graphics2D) g;
Enumeration laeufer = this.grafik_objekte.elements();
GrafikObjekt go;
g2d.setStroke( BS_Dialog.stroke);
while( laeufer.hasMoreElements()){
go = (GrafikObjekt) laeufer.nextElement();
go.zeichen_auf( g2d);
}
}
...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
32
ENDE
noch Fragen ?
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
33
Die OK-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
if( jTextField1.getText() != null){
Ist die Strichstärke angegeben ?
... /* (weiter auf der nächsten Folie ..) */
}
else{
stroke = new BasicStroke();
}
setVisible(false);
dispose();
} ...
}
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
34
Die OK-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
}
}
... /* (vorherige Folie ..) */ Sind End- und Verbindungstyp angegeben ?
if((jComboBox1.getSelectedIndex() > 0) &&
(jComboBox2.getSelectedIndex() > 0)){
... /* (weiter auf der nächsten Folie ..) */
}
else{
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()));
}
... /* (vorherige Folie ..) */
...
Bisher bekannt :
- Strichstärke
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
35
Die OK-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
}
}
... /* vorherige Folien */
int cap = this.jComboBox1.getSelectedIndex() - 1,
join = this.jComboBox2.getSelectedIndex() - 1;
if( jTextField2.getText() != null){
Ist ein Gehrungswinkel angegeben ?
... /* (weiter auf der nächsten Folie ..) */
}
else{
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()),
cap, join);
}
Bisher bekannt :
... /* vorherige Folien */
- Strichstärke
...
- Endtyp (cap)
- Verbindungstyp (join) 36
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
Die OK-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
... /* vorherige Folien */
if(( jTextField3.getText() != null) && ( jTextField4.getText() != null)){
... /* (weiter auf der nächsten Folie ..) */
}
}
Ist die Linie gestrichelt ?
}
else{
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()), cap, join,
Float.parseFloat( jTextField2.getText()));
}
... /* vorherige Folien */
...
Bisher bekannt :
- Strichstärke
- Endtyp (cap)
- Verbindungstyp (join)
- Gehrungswinkel
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
37
Die OK-Button Aktion
public class BS_Dialog extends javax.swing.JDialog {
static public BasicStroke stroke = new BasicStroke();
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
... /* vorherige Folien */
java.util.StringTokenizer tokens = new java.util.StringTokenizer(
jTextField3.getText(),";");
float[] dash_sequenz = new float[ tokens.countTokens()];
int i = 0;
Abfolge Sichtbar - Unsichtbar
while( tokens.hasMoreTokens()){
dash_sequenz[i] = Float.parseFloat( tokens.nextToken());
i++;
}
stroke = new BasicStroke( Float.parseFloat( jTextField1.getText()), cap, join,
Float.parseFloat( jTextField2.getText()),
dash_sequenz,
Float.parseFloat( jTextField4.getText()));
... /* vorherige Folien */
}
...
}
alles bekannt
IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04
38
Herunterladen