Programmieren II¶
Herzlich willkommen zur Programmieren II-Veranstaltung! Wir haben in Programmieren I unter Verwendung der Programmiersprache Java bereits wesentliche Konzepte kennengelernt, die für das Verständnis mordenen Programmierens notwendig sind. Diese Kenntnisse wollen wir nun erweitern und vertiefen. Wir werden Git kennenlernen, Exceptions, Wrapper-Klassen, Interfaces und Collections. Wir beschäftigen uns intensiv mit dem Testen von Programmen und erzeugen uns eigene Nutzeroberflächen. Hier einige Tipps, damit Sie die Veranstaltung erfolgreich durchführen und Sie dabei auch Spaß haben:
- Lösen Sie alle Übungsaufgaben selbständig! Es ist kein Problem, wenn Sie für das Bewältigen der Übungen etwas länger benötigen. Sollten Sie es gar nicht alleine schaffen, ist das auch kein Problem. Wichtig ist dann, dass Sie sich die Lösung anschauen und es erneut selbständig versuchen. Hören Sie nicht auf, bis Sie es geschafft haben!
- Sie können die Hausaufgaben zu zweit lösen. Achten Sie aber darauf, dass Sie Ihre gemeinsame Lösung vollständig verstanden haben und dass Sie sie danach auch alleine erstellen können. Sie können beim Lösen der Hausaufgaben beliebig kreativ sein! Die Aufgabenstellung gibt Ihnen Anhaltspunkte für eine eventuelle Lösung. Sie können es aber auch ganz anders machen!
- Die Klausurvorbereitung beginnt mit Beginn der Veranstaltung. Es ist nicht möglich, die Klausur am Ende des Semesters zu bestehen, wenn Sie nicht das ganze Semester über intensiv programmieren. Die Übungsaufgaben sind "kleine" Aufgaben, um das in der Vorlesung vermittelte Wissen direkt anzuwenden. Für die Lösung der Hausaufgaben ist bereits ein gewisses Abstraktionsniveau erforderlich, um zu erkennen, dass das in der Vorlesung vermittelte Wissen dafür ausreichend ist.
- Programmieren lernt man nur durch Programmieren. Sie müssen es tun. Das Lesen von Büchern oder das "Anschauen" von Code genügt nicht. Eine Sprache lernt man auch nur durch Sprechen. Sie müssen programmieren, programmieren, prohgrammieren...
- Lassen Sie sich durch Fehler nicht verunsichern, sondern analysieren Sie Ihre Fehler. Bis zur Klausur sollten Sie alle Fehler einmal gemacht haben. Wenn Sie sich überlegen, warum das jeweils ein Fehler war, dann werden Sie diesen Fehler nicht wiederholen und haben durch die Reflektion eine Menge gelernt. Fehler zu machen (und darüber zu reflektieren) gehört zu den besten Lernmethoden des Programmierens.
- Haben Sie Spaß! Je mehr Sie das Programmieren lernen, je mehr Spaß werden Sie haben. Wir versuchen, dass Sie das genaze Semester über Spaß am Programmieren haben werden. Sollte es Ihnen zwischendurch keinen Spaß mehr machen, geben Sie mir sofort Bescheid!
Viel Erfolg! Und viel Spaß!
Organisatorisches¶
Der (Corona-)Plan zur Durchführung der Veranstaltung ist derzeit wie folgt:
- Themen werden ausführlich in diesem Skript beschrieben und anhand von Videos eingeführt und verdeutlicht,
- das Skript und die Videos werden (spätestens) freitags hochgeladen,
- das heißt, "Vorlesungen" finden asynchron statt (im Selbststudium),
- zusammen mit dem Skript und den Videos werden sowohl die Übung als auch die Aufgabe hochgeladen,
- die Übung (und die vergangene Aufgabe) werden donnerstags (8:00 Uhr und nochmal 14:00 Uhr) besprochen (Sie können frei wählen, welche der beiden Übungen Sie wählen),
- bei Bedarf können wir auch gerne jederzeit eine Synchron-Video-Vorlesung einschieben, um Fragen zu erklären,
- die Veranstaltung wird durch ein Tutorium unterstützt,
- sollten Sie Wünsche haben, diesen Plan zu ändern, kommen Sie gerne auf mich zu
Zur erfolgreichen Durchführung der Veranstaltung müssen die Aufgaben lösen und zu den jeweiligen Fristen auf GitHub hochladen. Wenn Sie alle Aufgaben fristgerecht hochgeladen haben, dürfen Sie an der Klausur teilnehmen. Es werden insgesamt wahrscheinlich 10 Aufgaben sein, die Sie selbständig lösen und hochladen müssen. Sie können die Aufgaben auch zu zweit lösen. Laden Sie dann aber bitte beide jeweils die Lösung hoch. Am Ende des Semesters schreiben wir eine Klausur (am Rechner). Diese Klausur wird bewertet und entspricht der Note für das gesamte "Programmieren"-Modul.
Unter Aufgaben sind die Aufgaben beschrieben, die Sie in jeder Woche ausführen sollen. Damit Sie dies erfolgreich erledigen können, ist jeweils angegeben, welche Themen Sie dafür durcharbeiten müssen. Das Durcharbeiten der jeweiligen Themen entspricht jeweils einer Vorlesung. Diese wird also selbständig durchgeführt.
Daneben gibt es jede Woche (zu jedem Thema) Übungen, die wir in den Übungszeiten besprechen. Diese dienen der Anwendung und der Festigung der erlangten Kenntnisse. Die Übungen sind kleine Aufgaben, an denen Sie das neue Wissen anwenden sollen. Die Übungen dienen der Befähigung, die (größeren) Aufgaben lösen zu können.
Für die Kommunikation untereinander verwenden wir Slack. Dort können Sie alle inhaltlichen und organisatorischen Fragen stellen. Ich fände es gut, wenn ich dort möglichst wenig Fragen - zumindest die inhaltlichen - beantworten müsste, sondern eine Art internes Diskussionsforum entsteht. Es ist sehr gewünscht, dort Fragen zu stellen und noch mehr gewünscht, diese von Ihnen dort beantwortet zu sehen. Damit wäre allen geholfen und ich kann besser erkennen, wo noch Nachhol- bzw. Erläuterungsbedarf bei den meisten besteht. Außerdem lernen Sie beim Beantworten der Fragen nochmals deutlich mehr. Das wäre super, wenn das klappt!
Grober Inhalt (kann sich noch ändern)¶
Wir beschäftigen uns dieses Semester mit weiteren Konzepten der Programmierung. Wir lernen weitere Datenstrukturen kennen (Collections), werden lernen, mit Exceptions umzugehen und implementieren Tests. Wir beschäftigen uns mit Grafischen Nutzeroberflächen (GUIs) und lernen, Nutzereignisse zu behandeln.
Nachfolgend der vorläufige Wochenplan (wird eventuell angepasst). Die Vorlesungsvideos finden Sie darunter für die einzelnen Wochen (unter Inhalte).
Woche | Themen (Vorlesung) | Übung | Aufgabe | Abgabe Aufgabe bis | |
---|---|---|---|---|---|
1. | 05.-09.04.2021 | Einführung und Organisatorisches, Wiederholung | - | - | - |
1. | 12.-16.04.2021 | Git | Übung 1 | Aufgabe 1 | 25.04.2021 |
2. | 19.-23.04.2021 | Enumerations und Exceptions | Übung 2 | Aufgabe 2 | 02.05.2021 |
3. | 26.-30.04.2021 | Testen mit JUnit | Übung 3 | Aufgabe 3 | 09.05.2021 |
4. | 03.-07.05.2021 | Collections (List und Set) | Übung 4 | Aufgabe 4 | 16.05.2021 |
5. | 10.-14.05.2021 | Wrapper-Klassen (boxing und unboxing) | Übung 5 | Aufgabe 5 | 23.05.2021 |
6. | 17.-21.05.2021 | Collections (Map) | Übung 6 | - | - |
7. | 24.-28.05.2021 | Abstrakte Klassen + Interfaces | Übung 7 | Aufgabe 6 | 06.06.2021 |
8. | 31.-04.06.2021 | GUI Einführung | Übung 8 | Aufgabe 7 | 13.06.2021 |
9. | 07.-11.06.2021 | GUI Ereignisse | Übung 9 | Aufgabe 8 | 20.06.2021 |
10. | 14.-18.06.2021 | Graphics | Übung 10 | Aufgabe 9 | 04.07.2021 |
12. | 21.-25.06.2021 | Mausereignisse | Übung 11 | Aufgabe 10 | 11.07.2021 |
13. | 28.-02.07.2021 | Klausurvorbereitung | Übung 12 | - | - |
14. | 05.-09.07.2021 | Klausurvorbereitung | Übung 13 | - | - |
15. | 12.-16.07.2021 | Klausurvorbereitung | - | - | - |
Inhalte¶
05.-09.04.2021 - Einführung und Organisatorisches + Wiederholung
- siehe Organisatorisches
- siehe Wiederholung
- siehe Aufgabe 1
19.-23.04.2021 - Enum und Exceptions
- siehe Mehrdimensionale Arrays und Aufzählungstypen
- Video zu Mehrdimensionale Arrays und Aufzählungstypen
- siehe Exceptions
- Video zu Exceptions - das ist Teil 1 (Einführung)
- noch ein Video zu Exceptions - das ist Teil 2 (eigene Exceptions)
- siehe Übung 2
- siehe Aufgabe 3
26.-30.04.2021 - Testen mit JUnit
- siehe auch Teil 2 des Videos zu Exceptions (unter 19.-23.04.2021 - Enum und Exceptions eins drüber) - das kam erst diese Woche hinzu, deshalb hier der Verweis, gehört aber thematisch in die Woche davor, deshalb dort
- siehe JUnit-Tests
- siehe Video zu JUnit-Tests
- siehe Übung 3
- siehe Aufgabe 4
- Video aus der Vorlesung vom 28.04.2021
-
Quellcode aus der Vorlesung vom 28.04.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
package vorlesungen.testen; public class MyMath { public static int abs(int number) { if(number < 0 ) { return -number; } else { return number; } } public static double abs(double number) { if(number < 0 ) { return -number; } else { return number; } } public static double sqrt(double number) { double a = number; double b = 1.0; final double AREA = number; final double ERROR = 0.000001; while(abs(a-b) >= ERROR) { a = (a + b) / 2.0; b = AREA / a; } return a; } public static int ggT(int a, int b) { while(b!=0) { int rest = a % b; a = b; b = rest; } return a; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package vorlesungen.testen; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; class MyMathTest { @Test void testAbs3() { int result = MyMath.abs(3); assertEquals(3, result, "abs(3) not 3"); } @Test void testAbsMinus3() { int result = MyMath.abs(-3); assertEquals(3, result, "abs(-3) not 3"); } @Test void testSqrt9() { double result = MyMath.sqrt(9.0); assertEquals(3.0, result, 0.00001); } @Test void testSqrt25() { double result = MyMath.sqrt(25.0); assertTrue(MyMath.abs(5.0 - result) <= 0.00001); } @Test void testGgT44und12() { int result = MyMath.ggT(44, 12); assertEquals(4, result, "ggT of 44 and 12 not 4"); } }
1 2 3 4
module SoSe2021 { requires java.desktop; requires org.junit.jupiter.api; }
03.-07.05.2021 - Collections (List und Set)
- siehe Collections
- siehe Video zu Collections - Vorlesung 05.05.2021
-
Quellcode aus der Vorlesung vom 05.05.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
package vorlesungen.listenmengen; import java.util.*; /* * Collections: aehnlich wie Arrays, viele Elemente speichern * keine feste Laenge * wir koennen nur Referenztypen speichern (also nicht int, boolean, char, double, ...) * Elemente verschiedenen Typs speicherbar --> gar nicht gut, deshalb Typisieren * Arten von Collections: List (wie Arrays), Set (keine Doppelungen), Stack, Queue * Map (2-spaltige Tabellen Schlüssel-/Werte-Paare) */ public class ListenUndMengen { public static void main(String[] args) { System.out.printf("%n%n-------------- Listen ------------------%n%n"); Set<String> set1 = new HashSet<>(); Set<String> set2 = new TreeSet<>(); String s1 = "erster"; String s2 = "zweiter"; String s3 = "dritter"; String s4 = "zweiter"; Integer i1 = 1; System.out.println(set1.add(s1)); System.out.println(set1.add(s2)); System.out.println(set1.add(s3)); System.out.println(set1.add(s4)); // System.out.println(set1.add(i1)); System.out.println(set1.size()); Iterator<String> it = set1.iterator(); while(it.hasNext()) { System.out.println(it.next()); } System.out.println(); for(String element : set1) { System.out.println(element); } System.out.println(set1.remove("erster")); System.out.println(set1.remove("vierter")); System.out.println(); for(String element : set1) { System.out.println(element); } System.out.printf("%n%n-------------- Listen ------------------%n%n"); List<String> l1 = new ArrayList<>(); List<String> l2 = new LinkedList<>(); l1.add(s1); l1.add(s2); l1.add(s3); l1.add(s4); for(String s : l1) { System.out.println(s); } System.out.println(l1.size()); System.out.println(l1.remove("zweiter")); System.out.println(l1.remove("vierter")); for(String s : l1) { System.out.println(s); } System.out.println(); System.out.println("geloescht : " + l1.remove(1)); for(String s : l1) { System.out.println(s); } System.out.println(); l2.add("neu"); l2.add("alt"); for(String s : l2) { System.out.println(s); } System.out.println(); l1.addAll(l2); for(String s : l1) { System.out.println(s); } System.out.println(); l1.removeAll(l2); for(String s : l1) { System.out.println(s); } } }
-
siehe Übung 5
- siehe Aufgabe 5
10.-14.05.2021 - Wrapper-Klassen (boxing und unboxing)
- siehe Wrapper-Klassen
- siehe Video zu Wrapper-Klassen - Vorlesung 12.05.2021
- diese Woche keine neue Übung (Donnerstag ist Feiertag)
- diese Woche keine neue Aufgabe (Möglichkeit, bisher "Liegengebliebenes" aufzuarbeiten)
- Lösungen für Aufgaben 1 - 3 hochgeladen
17.-21.05.2021 - Collections (Map)
- siehe Maps
- siehe Video zu Maps - Vorlesung 19.05.2021
-
Quellcode aus der Vorlesung vom 19.05.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
package vorlesungen.maps; import java.util.*; public class Maps { public static void main(String[] args) { /* * in Maps speichern wir Schluessel-Werte-Paare * Schluessel sind eindeutig, Schluesseltyp K * Werte koennen sich doppel, Wertetyp V * statt add(), addAll() hier put(), putAll() */ Map<String, Integer> mapA = new HashMap<>(); mapA.put("A", 1); mapA.put("B", 2); mapA.put("C", 3); /* * ein einzelnes Schluessel-Werte-Paar ist vom * Typ Map.Entry * typisiert: Map.Entry<K,V> * unser Beispiel: Map.Entry<String, Integer> */ /* * leider nicht iterator(), sondern entrySet() * entrySet() erzeugt eine Set von lauter Schluessel-Werte-Paaren */ // Variante 1 Set<Map.Entry<String, Integer>> allEntriesFromMapA = mapA.entrySet(); for(Map.Entry<String, Integer> entry : allEntriesFromMapA) { System.out.println("Schluessel : " + entry.getKey() + " Wert : " + entry.getValue()); } System.out.println(allEntriesFromMapA.size()); // Iterator<Map.Entry<String, Integer>> it = allEntriesFromMapA.iterator(); System.out.println(); // Variante 2 for(Map.Entry<String, Integer> entry : mapA.entrySet()) { System.out.println("Schluessel : " + entry.getKey() + " Wert : " + entry.getValue()); } System.out.println(mapA.containsKey("B")); System.out.println(mapA.containsKey("D")); System.out.println(mapA.get("B")); System.out.printf("%n%n------------ alle keys von mapA ---------------%n%n"); Set<String> allKeys = mapA.keySet(); for(String key : allKeys) { System.out.println("key : " + key); } System.out.printf("%n%n------------ mapA ---------------%n%n"); mapA.put("B", 5); for(Map.Entry<String, Integer> entry : mapA.entrySet()) { System.out.println("Schluessel : " + entry.getKey() + " Wert : " + entry.getValue()); } System.out.printf("%n%n------------ mapB ---------------%n%n"); Map<String, Integer> mapB = new HashMap<>(); mapB.put("B", 6); mapB.put("D", 7); for(Map.Entry<String, Integer> entry : mapB.entrySet()) { System.out.println("Schluessel : " + entry.getKey() + " Wert : " + entry.getValue()); } mapA.putAll(mapB); System.out.printf("%n%n------------ mapA ---------------%n%n"); for(Map.Entry<String, Integer> entry : mapA.entrySet()) { System.out.println("Schluessel : " + entry.getKey() + " Wert : " + entry.getValue()); } mapA.put("E", 1); System.out.printf("%n%n------------ alle values von mapA ---------------%n%n"); Collection<Integer> allValues = mapA.values(); for(Integer val : allValues) { System.out.println("value : " + val); } } }
-
siehe Übung 6
- siehe Aufgabe 6
24.-28.05.2021 - Abstrakte Klassen und Interfaces
- siehe Abstrakte Klassen und Interfaces
- siehe Video zu Abstrakte Klassen und Interfaces - Vorlesung 26.05.2021
-
Quellcode aus der Vorlesung vom 26.05.2021
1 2 3 4 5
public abstract class Shape { public abstract double perimeter(); public abstract double area(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
public class Rectangle extends Shape implements Comparable<Rectangle> { private int width; private int height; public Rectangle(int width, int height) { this.width = width; this.height = height; } @Override public double perimeter() { return (2.0 * (this.width + this.height)); } @Override public double area() { return this.width * this.height; } @Override public int compareTo(Rectangle o) { /* * this > o --> positiver int-Wert * this < o --> negativer int-Wert * this == o --> 0 */ return ((this.width + this.height) - (o.width + o.height)); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double perimeter() { return Math.PI * 2.0 * this.radius; } @Override public double area() { return Math.PI * this.radius * this.radius; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
public class TestShape { public static void printPerimeter(Shape s) { System.out.printf("perimeter : %.2f cm%n", s.perimeter()); } public static void printArea(Shape s) { System.out.printf("area : %.2f cm%n", s.area()); } public static void sortieren(Comparable[] unsorted) { for(int bubble=1; bubble<unsorted.length; bubble++) { for(int index=0; index<unsorted.length-bubble; index++) { if(unsorted[index].compareTo(unsorted[index+1]) > 0) { Comparable tmp = unsorted[index]; unsorted[index] = unsorted[index+1]; unsorted[index+1] = tmp; } } } } public static void main(String[] args) { Shape s1 = new Rectangle(10,20); System.out.println(s1.perimeter()); System.out.println(s1.area()); Shape s2 = new Circle(1.0); System.out.println(s2.perimeter()); System.out.println(s2.area()); printPerimeter(new Rectangle(5,15)); printPerimeter(new Circle(5.0)); System.out.println("A".compareTo("B")); System.out.println("B".compareTo("A")); System.out.println("A".compareTo("A")); Rectangle[] rectArr = new Rectangle[6]; rectArr[0] = new Rectangle(9, 13); rectArr[1] = new Rectangle(4, 17); rectArr[2] = new Rectangle(12, 5); rectArr[3] = new Rectangle(8, 9); rectArr[4] = new Rectangle(10, 11); rectArr[5] = new Rectangle(5, 15); System.out.printf("%n%n------------------------ unsortiert --------------------------%n%n"); sortieren(rectArr); } }
-
siehe Übung 7
- siehe Aufgabe 7
31.-04.06.2021 - GUI Einführung
- siehe Grafical User Interfaces
- siehe Video zu Grafical User Interfaces - Vorlesung 02.06.2021
-
Quellcode aus der Vorlesung vom 02.06.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; public class MyFirstWindow extends JFrame { public MyFirstWindow() { super(); // Konstruktor von JFrame this.setTitle("My first window"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel content = this.initContent(); this.getContentPane().add(content); // this.getContentPane().setBackground(Color.CYAN); this.setSize(400, 300); this.setLocation(200, 100); this.setVisible(true); } /* * FlowLayout - alles nebeneinander, so lange es passt, sonst untereinander (Standardlayout JPanel) * GridLayout - Gitterstruktur (Zeilen und Spalten) * BorderLayout - Norden, Sueden, Osten, Westen, Center (Stanfdardlayout eines JFrame) */ private JPanel initContent() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); JPanel center = new JPanel(); center.setLayout(new GridLayout(3, 2)); JButton cb1 = new JButton("EAST"); JButton cb2 = new JButton("WEST"); JButton cb3 = new JButton("NORTH"); JButton cb4 = new JButton("SOUTH"); JButton cb5 = new JButton("CENTER"); center.add(cb1); center.add(cb2); center.add(cb3); center.add(cb4); center.add(cb5); JButton b1 = new JButton("EAST"); JButton b2 = new JButton("WEST"); JButton b3 = new JButton("NORTH"); JButton b4 = new JButton("SOUTH"); JButton b5 = new JButton("CENTER"); mainPanel.add(b1, BorderLayout.EAST); mainPanel.add(center, BorderLayout.CENTER); mainPanel.add(b3, BorderLayout.NORTH); mainPanel.add(b4, BorderLayout.SOUTH); mainPanel.add(b2, BorderLayout.WEST); /* mainPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 40)); JButton b1 = new JButton("EAST"); JButton b2 = new JButton("WEST"); JButton b3 = new JButton("NORTH"); JButton b4 = new JButton("SOUTH"); JButton b5 = new JButton("CENTER"); mainPanel.add(b1); mainPanel.add(b2); mainPanel.add(b3); mainPanel.add(b4); mainPanel.add(b5); */ /* mainPanel.setLayout(new BorderLayout()); JButton b1 = new JButton("EAST"); JButton b2 = new JButton("WEST"); JButton b3 = new JButton("NORTH"); JButton b4 = new JButton("SOUTH"); JButton b5 = new JButton("CENTER"); JLabel l1 = new JLabel("Test"); JPanel east = new JPanel(); east.setLayout(new FlowLayout()); east.add(b1); east.add(l1); mainPanel.add(east, BorderLayout.EAST); mainPanel.add(b2, BorderLayout.WEST); mainPanel.add(b3, BorderLayout.NORTH); mainPanel.add(b4, BorderLayout.SOUTH); mainPanel.add(b5, BorderLayout.CENTER); */ /* // hier weitere Container oder Steuerelemente hinzufuegen JLabel label = new JLabel("Name : "); JTextField input = new JTextField(10); JButton button = new JButton("Klick mich!"); JCheckBox cb = new JCheckBox(); JRadioButton rb = new JRadioButton(); mainPanel.add(label); mainPanel.add(input); mainPanel.add(button); mainPanel.add(cb); mainPanel.add(rb); */ return mainPanel; } public static void main(String[] args) { new MyFirstWindow(); } }
-
siehe Übung 8
- siehe Aufgabe 8
07.-11.06.2021 - GUI Ereignisse
- siehe GUI Ereignisse
- siehe Video zu GUI Ereignisse - Vorlesung 09.06.2021
-
Quellcode aus der Vorlesung vom 09.06.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Ereignisbehandlung extends JFrame implements ActionListener { Integer anzKlicks = 0; JLabel unten; public Ereignisbehandlung(){ super(); this.setTitle("Ereignisbehandlung"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel content = this.initContent(); this.getContentPane().add(content); this.setSize(200, 150); this.setLocation(200, 100); this.setVisible(true); } public JPanel initContent() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); JPanel oben = new JPanel(); JButton minus = new JButton("-"); JButton plus = new JButton("+"); oben.add(minus); oben.add(plus); plus.addActionListener(this); minus.addActionListener(this); this.unten = new JLabel(this.anzKlicks.toString()); this.unten.setFont(new Font("Verdana", Font.BOLD, 48)); this.unten.setHorizontalAlignment(JLabel.CENTER); mainPanel.add(oben, BorderLayout.NORTH); mainPanel.add(unten, BorderLayout.CENTER); return mainPanel; } public static void main(String[] args) { new Ereignisbehandlung(); } @Override public void actionPerformed(ActionEvent e) { Object quelle = e.getSource(); // hat ActionEvent ausgeloest if(quelle instanceof JButton) { JButton button = (JButton)quelle; if(button.getText().equals("-")) { this.anzKlicks--; System.out.println("Minus-Button geklickt ... " + this.anzKlicks); } else if(button.getText().equals("+")) { this.anzKlicks++; System.out.println("Plus-Button geklickt ... " + this.anzKlicks); } this.unten.setText(this.anzKlicks.toString()); } } }
-
siehe Übung 9
- siehe Aufgabe 9
14.-18.06.2021 - Graphics
- siehe GUI Graphics
- siehe Video zu GUI Graphics - Vorlesung 16.06.2021
-
Quellcode aus der Vorlesung vom 16.06.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Ereignisbehandlung extends JFrame { private Integer anzKlicks = 0; private JLabel unten; public Ereignisbehandlung(){ super(); this.setTitle("Ereignisbehandlung"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel content = this.initContent(); this.getContentPane().add(content); this.setSize(200, 150); this.setLocation(200, 100); this.setVisible(true); } public JPanel initContent() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); JPanel oben = new JPanel(); JButton minus = new JButton("-"); JButton plus = new JButton("+"); oben.add(minus); oben.add(plus); // ActionHandler ah = new ActionHandler(); plus.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Ereignisbehandlung.this.anzKlicks++; Ereignisbehandlung.this.unten.setText(Ereignisbehandlung.this.anzKlicks.toString()); } }); minus.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Ereignisbehandlung.this.anzKlicks--; Ereignisbehandlung.this.unten.setText(Ereignisbehandlung.this.anzKlicks.toString()); } }); this.unten = new JLabel(this.anzKlicks.toString()); this.unten.setFont(new Font("Verdana", Font.BOLD, 48)); this.unten.setHorizontalAlignment(JLabel.CENTER); mainPanel.add(oben, BorderLayout.NORTH); mainPanel.add(unten, BorderLayout.CENTER); return mainPanel; } /* public class ActionHandler implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Object quelle = e.getSource(); // hat ActionEvent ausgeloest if(quelle instanceof JButton) { JButton button = (JButton)quelle; if(button.getText().equals("-")) { Ereignisbehandlung.this.anzKlicks--; System.out.println("Minus-Button geklickt ... " + Ereignisbehandlung.this.anzKlicks); } else if(button.getText().equals("+")) { Ereignisbehandlung.this.anzKlicks++; System.out.println("Plus-Button geklickt ... " + Ereignisbehandlung.this.anzKlicks); } Ereignisbehandlung.this.unten.setText(Ereignisbehandlung.this.anzKlicks.toString()); } } } */ public static void main(String[] args) { new Ereignisbehandlung(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Arc2D; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Zeichnen extends JFrame { public Zeichnen(){ super(); this.setTitle("Wir zeichnen!"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel oben = new JPanel(); JTextField tf = new JTextField(10); oben.add(tf); this.getContentPane().add(oben, BorderLayout.NORTH); Canvas content = new Canvas(); this.getContentPane().add(content, BorderLayout.CENTER); JPanel unten = new JPanel(); JButton but1 = new JButton("ok"); unten.add(but1); this.getContentPane().add(unten, BorderLayout.SOUTH); this.setSize(500, 500); this.setLocation(200, 100); this.setVisible(true); } public class Canvas extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setColor(new Color(127, 127, 0)); g2.fillRect(20, 80, 400, 400); Shape arc = new Arc2D.Double(40, 30, 300, 300, 90, -180, Arc2D.PIE); g2.draw(arc); } } public static void main(String[] args) { new Zeichnen(); } }
-
siehe Übung 10
- siehe Aufgabe 10
21.-25.06.2021 - Mausereignisse
- siehe Mausereignisse
- siehe Video zu Mausereignisse - Vorlesung 23.06.2021
-
Quellcode aus der Vorlesung vom 23.06.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; public class Mausereignisse extends JFrame implements MouseListener, MouseMotionListener { Canvas canvas; List<Point> points; Linie aktuelleLinie; List<Linie> linien; public Mausereignisse() { super(); this.setTitle("Mausereignisse"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.canvas = new Canvas(); this.canvas.addMouseListener(this); this.canvas.addMouseMotionListener(this); this.getContentPane().add(this.canvas); this.points = new ArrayList<>(); this.linien = new ArrayList<>(); this.setSize(400, 400); this.setLocation(1000,100); this.setVisible(true); } private class Canvas extends JPanel { final static int DURCHMESSER = 20; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Implementierung von JPanel aufrufen Graphics2D g2 = (Graphics2D)g; // Methoden von Graphics2D nutzbar // hier koennen wir zeichnen for(Point p : Mausereignisse.this.points) { if(p.x > this.getWidth()/2) { g2.setColor(Color.RED); } else { g2.setColor(Color.BLUE); } g2.fillOval(p.x, p.y, DURCHMESSER, DURCHMESSER); } g2.setColor(Color.GREEN); for(Linie l : Mausereignisse.this.linien) { int x1 = l.getXStart(); int y1 = l.getYStart(); int x2 = l.getXEnde(); int y2 = l.getYEnde(); g2.drawLine(x1, y1, x2, y2); } if(Mausereignisse.this.aktuelleLinie != null) { int x1 = Mausereignisse.this.aktuelleLinie.getXStart(); int y1 = Mausereignisse.this.aktuelleLinie.getYStart(); int x2 = Mausereignisse.this.aktuelleLinie.getXEnde(); int y2 = Mausereignisse.this.aktuelleLinie.getYEnde(); g2.drawLine(x1, y1, x2, y2); } } } public static void main(String[] args) { new Mausereignisse(); } @Override public void mouseClicked(MouseEvent e) { /* int x = e.getX(); int y = e.getY(); System.out.println("mouseClicked bei [x=" + p.x +", y=" +p.y +"]"); System.out.println("mouseClicked bei [x=" + x +", y=" +y +"]"); */ } @Override public void mousePressed(MouseEvent e) { Point p = e.getPoint(); // p.x p.y this.points.add(p); this.aktuelleLinie = new Linie(p,p); this.canvas.repaint(); // ruft paintComponent() von canvas auf System.out.println("mousePressed"); } @Override public void mouseReleased(MouseEvent e) { System.out.println("mouseReleased"); this.linien.add(this.aktuelleLinie); this.canvas.repaint(); } @Override public void mouseEntered(MouseEvent e) { System.out.println("mouseEntered"); } @Override public void mouseExited(MouseEvent e) { System.out.println("mouseExited"); } @Override public void mouseDragged(MouseEvent e) { Point p = e.getPoint(); this.aktuelleLinie.setEnde(p); this.canvas.repaint(); // System.out.println("mouseDragged"); } @Override public void mouseMoved(MouseEvent e) { int x = e.getX(); int y = e.getY(); // System.out.println("mouseMoved bei [x=" + x + ", y= " + y + "]"); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
public class Linie { private Point start; private Point ende; public Linie(Point start, Point ende) { this.start = start; this.ende = ende; } public int getXStart() { return this.start.x; } public int getYStart() { return this.start.y; } public int getXEnde() { return this.ende.x; } public int getYEnde() { return this.ende.y; } public void setEnde(Point ende) { this.ende = ende; } }
-
siehe Übung 11
- keine neuen Aufgaben mehr, jetzt nur noch Klausurvorbereitung, sowohl in den Vorlesungen, als auch in den Übungen
28.-02.07.2021 - Klausurvorbereitung
- siehe Klausurvorbereitung
- siehe Video zu Klausurvorbereitung - Vorlesung 30.06.2021
-
Quellcode aus der Vorlesung vom 30.06.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
import java.awt.*; import java.util.Random; import javax.swing.*; public class KV1 extends JFrame { Canvas canvas; public KV1() { super(); this.setTitle("Klausurvorbereitung 1"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.canvas = new Canvas(); this.getContentPane().add(this.canvas, BorderLayout.CENTER); this.setSize(400, 400); this.setLocation(200,100); this.setVisible(true); } class Canvas extends JPanel { final static int DURCHMESSER = 3; final static int ANZAHL_PUNKTE = 10000; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; int widthCanvas = this.getWidth(); int heightCanvas = this.getHeight(); System.out.println("w = " + widthCanvas +", h = " + heightCanvas); //g2.drawLine(0, 0, widthCanvas, heightCanvas); //g2.drawLine(widthCanvas, 0, 0, heightCanvas); int x1=0, seite=0, y1 = 0; if(widthCanvas < heightCanvas) { x1 = (int)(widthCanvas * 0.05); seite = (int)(widthCanvas * 0.9); y1 = (heightCanvas - seite) /2; } else { y1 = (int)(heightCanvas * 0.05); seite = (int)(heightCanvas * 0.9); x1 = (widthCanvas - seite) / 2; } g2.setStroke(new BasicStroke(3.0f)); g2.drawRect(x1, y1, seite, seite); g2.drawArc(x1, y1, seite * 2, seite * 2, 90, 90); // g2.fillOval(30, 40, DURCHMESSER, DURCHMESSER); // g2.fillOval(130, 140, DURCHMESSER, DURCHMESSER); Random r = new Random(); int xm = x1 + seite; int ym = y1 + seite; for(int i = 0; i < ANZAHL_PUNKTE; i++) { int x = r.nextInt(seite-DURCHMESSER) + x1; int y = r.nextInt(seite-DURCHMESSER) + y1; // (x-xm)^2 + (y-ym)^2 = r^2 if(((x-xm) * (x-xm) + (y -ym) * (y-ym) <= seite * seite)) { g2.setColor(Color.RED); } else { g2.setColor(Color.BLUE); } g2.fillOval(x, y, DURCHMESSER, DURCHMESSER); } } } public static void main(String[] args) { new KV1(); } }
-
siehe Übung 12
12.-16.07.2021 - Klausurvorbereitung
- siehe Klausurvorbereitung
- siehe Video zu Klausurvorbereitung - Vorlesung 14.07.2021
-
Quellcode aus der Vorlesung vom 14.07.2021
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class RechteckeAnordnen extends JFrame implements MouseListener, MouseMotionListener{ Canvas canvas; JLabel fixLabel; MyRectangle curRect; Point remember; boolean move = false; List<MyRectangle> fixierteRect; public RechteckeAnordnen() { super(); this.setTitle("Rechtecke fixieren"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.fixierteRect = new ArrayList<>(); this.canvas = new Canvas(); this.canvas.setBorder(BorderFactory.createLineBorder(Color.BLACK)); this.canvas.addMouseListener(this); this.canvas.addMouseMotionListener(this); this.getContentPane().add(this.canvas, BorderLayout.CENTER); // von den folgenden vier Zeilen werden eventuell eine oder mehrere oder alle auskommentiert this.getContentPane().add(this.initNorth(), BorderLayout.NORTH); this.getContentPane().add(this.initSouth(), BorderLayout.SOUTH); this.setSize(400, 400); this.setLocation(300,200); this.setVisible(true); } // start inner class private class Canvas extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Implementierung von JPanel aufrufen Graphics2D g2 = (Graphics2D)g; // Methoden von Graphics2D nutzbar int widthPanel = this.getWidth(); int heightPanel = this.getHeight(); g2.drawLine(widthPanel/2, 0, widthPanel/2, heightPanel); g2.drawLine(0, heightPanel/2, widthPanel, heightPanel/2); for(MyRectangle mr : RechteckeAnordnen.this.fixierteRect) { int x = mr.getX(); int y = mr.getY(); int width = mr.getWidth(); int height = mr.getHeight(); Color curColor = mr.getColor(); g2.setColor(curColor); g2.fillRect(x, y, width, height); } if(RechteckeAnordnen.this.curRect != null) { int x = RechteckeAnordnen.this.curRect.getX(); int y = RechteckeAnordnen.this.curRect.getY(); int width = RechteckeAnordnen.this.curRect.getWidth(); int height = RechteckeAnordnen.this.curRect.getHeight(); Color curColor = RechteckeAnordnen.this.curRect.getColor(); g2.setColor(curColor); g2.fillRect(x, y, width, height); } } } // ende innere Klasse private JPanel initNorth() { JPanel north = new JPanel(); this.fixLabel = new JLabel("0 Rechtecke fixiert"); this.fixLabel.setFont(new Font("Verdana", Font.ITALIC, 16)); north.add(this.fixLabel); return north; } private JPanel initSouth() { JPanel south = new JPanel(); JButton btnClear = new JButton("clear"); btnClear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { RechteckeAnordnen.this.curRect = null; RechteckeAnordnen.this.fixierteRect.clear(); RechteckeAnordnen.this.move = false; RechteckeAnordnen.this.fixLabel.setText("0 Rechtecke fixiert"); RechteckeAnordnen.this.canvas.repaint(); } }); south.add(btnClear); JButton btnRect = new JButton("rectangle"); btnRect.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int widthCanvas = RechteckeAnordnen.this.canvas.getWidth(); int heightCanvas = RechteckeAnordnen.this.canvas.getHeight(); int widthRect = widthCanvas/2; int heightRect = heightCanvas/2; int xRect = widthCanvas/4; int yRect = heightCanvas/4; Color curColor; switch(RechteckeAnordnen.this.fixierteRect.size()) { case 0: curColor = Color.GREEN; break; case 1: curColor = Color.RED; break; case 2: curColor = Color.YELLOW; break; case 3: curColor = Color.DARK_GRAY; break; default: curColor = Color.WHITE; } RechteckeAnordnen.this.curRect = new MyRectangle(xRect, yRect, widthRect, heightRect, curColor); RechteckeAnordnen.this.canvas.repaint(); } }); south.add(btnRect); return south; } public static void main(String[] args) { new RechteckeAnordnen(); } @Override public void mouseDragged(MouseEvent e) { if(this.move) { // bewegen int x = e.getX(); int y = e.getY(); int xLast = this.remember.x; int yLast = this.remember.y; int xDiff = x - xLast; int yDiff = y - yLast; this.curRect.move(xDiff, yDiff); this.remember = e.getPoint(); // fixieren int xRect = this.curRect.getX(); int yRect = this.curRect.getY(); final int ABSTAND = 25; int xGoal = 0; int yGoal = 0; int widthCanvas = this.canvas.getWidth(); int heightCanvas = this.canvas.getHeight(); switch(this.fixierteRect.size()) { case 0: xGoal = 0; yGoal = 0; break; case 1: xGoal = widthCanvas/2; yGoal = 0; break; case 2: xGoal = 0; yGoal = heightCanvas/2; break; case 3: xGoal = widthCanvas/2; yGoal = heightCanvas/2; break; } if(Math.abs(xRect - xGoal) < ABSTAND && Math.abs(yRect - yGoal) < ABSTAND) { this.curRect.setFix(true); this.curRect.setX(xGoal); this.curRect.setY(yGoal); this.fixierteRect.add(this.curRect); int anzFix = this.fixierteRect.size(); if(anzFix == 1) { this.fixLabel.setText(anzFix + " Rechteck fixiert"); } else if(anzFix == 4) { this.fixLabel.setFont(new Font("Verdana", Font.ITALIC|Font.BOLD, 18)); this.fixLabel.setText(anzFix + " Rechtecke fixiert -- Ende"); } else { this.fixLabel.setText(anzFix + " Rechtecke fixiert"); } this.curRect = null; this.move = false; } this.canvas.repaint(); } } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); if(this.curRect != null && !this.curRect.isFix() && this.curRect.inside(x, y)) { this.remember = new Point(x,y); this.move = true; } } @Override public void mouseReleased(MouseEvent e) { this.move = false; } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
import java.awt.Color; public class MyRectangle { private int x; private int y; private int width; private int height; private Color color; private boolean fix; public MyRectangle(int x, int y, int width, int height, Color color) { this.x = x; this.y = y; this.width = width; this.height = height; this.color = color; this.fix = false; } public int getX() { return this.x; } public int getY() { return this.y; } public int getWidth() { return this.width; } public int getHeight() { return this.height; } public Color getColor() { return this.color; } public boolean inside(int x, int y) { return (x >= this.x && x <= this.x+this.width && y >= this.y && y <= this.y+this.height); } public void move(int xDiff, int yDiff) { this.x = this.x + xDiff; this.y = this.y + yDiff; } public boolean isFix() { return this.fix; } public void setFix(boolean fix) { this.fix = fix; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } }
-
siehe Übung 14