close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

1.6.4 Erkennungsarbeit: Was wurde getroffen?

EinbettenHerunterladen
(99)
Ergänzung:
Wann ist eine Push-Release-Folge ein Click?
Wenn zwischen Push und Release die Maus NICHT bewegt wird...
... unabhängig von der dazwischen liegenden Zeit!
Press Release Click
Wie erkennt man einen Doppelklick?
Mit der Methode getClickCount() des MouseEvent
Wann ist ein zweifacher Click ein Doppelklick?
Doppelclick ist ein einfacher Click,
gefolgt von einem hinreichend schnell folgenden zweiten Click
an der gleichen Position
Press Release Click(Count==1) Press Release Click(Count==2)
Analog der Dreifach-Click:
Press Release Click(Count==1)
Press Release Click(Count==2)
Press Release Click(Count==3)
© 2007 Gerd Szwillus
MausTest6.java
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(100)
1.6.4 Erkennungsarbeit: Was wurde getroffen?
Erkennung der „Treffer“ muss manuell programmiert werden!
MausTest7.java
Programmfunktionalität eines Beispiels:
•
•
Zeichnen mehrerer Rechtecke durch Aufziehen und persistentes Speichern aller Rechtecke
(wie MausTest5a.java)
Push mit rechter Maustaste auf ein
existierendes Rechteck ändert dessen Farbe
Umsetzung:
o Farbinformation ist jetzt eine Eigenschaft des
Rechtecks – wird in der Klasse Rechteck
gespeichert, getter-Methode, Methode
neueFarbe() zum Wechseln der Farbe
o "Push in ein Rechteck" bedeutet: Erkennen,
dass der Mauspunkt in einem Rechteck liegt –
und in welchem. Ein Rechteck muss melden
können "Ich wurde getroffen", Methode
enthält() der Klasse Rechteck
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(101)
class Rechteck {
private Point links_oben, rechts_unten;
private Color farbe = Color.blue;
// Individuelles Speichern der Farbe
Rechteck(Point a, Point b) {
links_oben =
new Point(Math.min(a.x, b.x), Math.min(a.y, b.y));
rechts_unten =
new Point(Math.max(a.x, b.x), Math.max(a.y, b.y));
}
boolean enthält(Point p) {
// einfach formulierbar!
return (links_oben.x<=p.x) && (links_oben.y<=p.y) &&
(p.x<=rechts_unten.x) && (p.y<=rechts_unten.y);
}
/* Andere Form der Speicherung als zuvor:
links_oben
rechts_unten
*/
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(102)
void zeichneMich(Graphics g, Color c, boolean gefüllt) {
g.setColor(c);
if (gefüllt) {
// wie vor, nur umformulierte Argumente
g.fillRect(links_oben.x, links_oben.y,
rechts_unten.x-links_oben.x,
rechts_unten.y-links_oben.y);
g.setColor(Color.black);
g.drawRect(links_oben.x, links_oben.y,
rechts_unten.x-links_oben.x,
rechts_unten.y-links_oben.y);
}
else g.drawRect(links_oben.x, links_oben.y,
rechts_unten.x-links_oben.x,
rechts_unten.y-links_oben.y);
}
Color getColor() { return farbe; }
void neueFarbe() {
farbe = new Color(
// willkürliche Veränderung der Farbe
(farbe.getRed()+53)%256,
(farbe.getGreen()+23)%256,
(farbe.getBlue()+73)%256
);
}
} // class Rechteck
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(103)
o Zeichenfläche, Mausaktionen: Differenzieren ob "links" oder "rechts" geklickt wurde, sonst
wie vorher
Links-Press wie vorher Press,
Rechts-Press: Welches Rechteck wurde getroffen? Dem eine neue Farbe geben!
Links-Release wie vorher Release
public void mousePressed(MouseEvent m) {
if ((m.getModifiers() & MouseEvent.BUTTON1_MASK) == // Linke Taste
MouseEvent.BUTTON1_MASK) {
a = m.getPoint();
b = null;
dragging = true;
repaint();
}
else if ((m.getModifiers() & MouseEvent.BUTTON3_MASK) == // Rechte
MouseEvent.BUTTON3_MASK) {
Rechteck r = getroffen(m.getPoint()); // Finden des getr. Rechtecks
if (r != null) {
// r wurde getroffen
r.neueFarbe();
// dann dieses umfärben!
repaint();
}
}
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(104)
Methode getroffen() bestimmt aus einem Point das diesen enthaltende Rechteck
private Rechteck getroffen(Point m) {
Node p = elemente;
boolean gefunden = false;
//nur Zeichenfläche braucht sie
while (!gefunden && p != null) {
// Jedes Rechteck wird gefragt
if (p.data.enthält(m)) gefunden = true;
else p = p.next;
}
if (gefunden) return p.data;
else return null;
}
o Paint()-Methode fast wie vorher, aber beim Zeichnen der gefüllten Rechtecke (p.data)
vorher ihre Farbe holen und in dieser Farbe zeichnen
Statt p.data.zeichneMich(g, Color.blue, true);
Jetzt p.data.zeichneMich(g, p.data.getColor(), true);
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(105)
1.7 Zusammenfassung zum Thema Swing
Prinzipien der Erzeugung graphischer Darstellungen
"Zeichnen" von graphischen Elementen (Linie, Kreis, Rechteck, Textelemente, ...)
Erzeugen von Bedienelementen ("Widgets", Swing-Komponenten) im Java-Programm
Programminterne Verwaltung, Kommunikation (Anwendung der objektorientierten
Programmierkonzepte)
Externe Sichtbarkeit (Festlegung von Eigenschaften, Anordnung) und Bedienung durch den
Benutzer (Wirkung nach außen)
Struktur von Programmen mit interaktiver Graphik (Bildelementlisten)
Erzeugung von Dynamik
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
(106)
Prinzipien der Verarbeitung von Ereignissen
Listener-Programmierung
Einsatz anonymer Klassen
Einsatz der EventAdapter-Klassen bzw. der EventListener-Interfaces
Verarbeitung von Mausereignissen
Swing-Komponenten
JLabel - passives Anzeigeelement
JFrame - die zentrale Fensterklasse
JDialog - der Grundbaustein für Dialogboxen
JPanel - der praktische Behälter für alles andere
JButton - das wichtigste ereignisauslösende Bedienelement
JTextField, JTextArea - Texteingabe durch den Benutzer, Auswertung im Programm
JMenu, JMenuBar, JMenuItem - Bausteine für die Integration von Menüs
Layout-Manager
© 2007 Gerd Szwillus
Vorlesung „Grundlagen der Programmierung 2“, SS 2007, Gerd Szwillus
Document
Kategorie
Technik
Seitenansichten
43
Dateigröße
54 KB
Tags
1/--Seiten
melden