import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PunkteVerbinden extends JFrame {
Container c;
Zeichenbrett z;
public PunkteVerbinden() {
c = getContentPane();
z = new Zeichenbrett(); //Alles was passiert, passiert im Zeichenbrett,
// ist ne saubere Lösung oder?
c.add(z);
}
public static void main(String[] args) {
PunkteVerbinden fenster = new PunkteVerbinden();
fenster.setTitle("Punkte verbinden");
fenster.setSize(250,200);
fenster.setVisible(true);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Zeichenbrett extends JPanel {
private int[] x, y; // Koordinaten der Maus-Klicks
private int n; // Anzahl Klicks
public Zeichenbrett() { // Konstruktor
n = 0;
x = new int[1000];
y = new int[1000];
addMouseListener(new ClickBearbeiter());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawPolyline(x,y,n);
}
// Innere Listener-Klasse fuer Maus-Ereignisse,
// Innerer Monolog: Ich finde die Lösung total elegant und mir fallen sofort 1000 Anwendungsmöglichkeiten ein.
// aber wie soll ich mit die innere Klasse vorstellen? Ich hab ein Objekt der Klasse Zeichenbrett erzeugt, das jetzt Speicher verschlingt.
// Jetzt habe ich Klasse Mouseadapter an das Objekt drangebastelt (Sorry für das Wort, aber es ist ja nicht vererbt)
// Intuitiv würde ich jetzt sagen, es geht nicht um die Klasse, sondern um deren Methoden, die offensichtlich nicht statisch sein können, weil
// zu meinem Objekt gehören.
// Aber so ganz passt das nocht nicht, naja....
class ClickBearbeiter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
x[n] = e.getX(); // speichere x-Koordinate
y[n] = e.getY(); // speichere y-Koordinate
n++; // erhoehe Anzahl Klicks
repaint();
}
}
}