Erstmal ein "Hallo" in die Runde
Mein Ziel ist es, eine Klasse zu schaffen, die erstmal als Zeichenbrett für Rechtecke dienen soll. Diese Rechtecke werden per Maus "aufgezogen" (wie auf dem Windows-Desktop mit gedrückter Maustaste, man sieht also einen Rahmen), läßt man die Taste los, erscheint das Rechteck. Auf der Fläche soll man bis zu 10 Rechtecke zeichnen können.
So weit bin ich nun auch schon gekommen und es klappt wunderbar.
Nun würde ich gerne dazu übergehen, diese Rechtecke in einem Vektor zu speichern. Leider bin ich damit ein bisschen überfordert.
Hier mal mein Code:
Meine erste Idee war, die 4 relevanten Daten pro Rechteck (Breite, Höhe, X/Y-Wert der linken oberen Ecke) in einem mehrdimensionalen Array (siehen oben, Array data) zu speichern und das dann in den Vektor zu packen.
Hört sich gut an, bekomme es aber irgendwie nicht umgesetzt...
Am Besten wäre es wohl, die Erstellung der Rechtecke in eine eigene Klasse zu packen und diese dann im Vektor zu speichern. Aber auch da hakt es irgendwie in meinen Gedanken (ist auch schon spät).
Was mich noch beschäftigt ist folgendes: mir war es nicht möglich, die Zeichenfläche mit einem JFrame umzusetzen, da die Rechtecke beim verändern des Fensters regelmäßig verschwunden sind. Mit dem normalen Frame klappt es ohne Probleme. Was könnte ich bei dem JFrame falsch gemacht haben, oder gibt es immer Probleme, wenn man direkt auf ein JFrame zeichnen will...?
Wow, erster Beitrag und dann gleich so lang. Hoffe, dass irgendjemand ein bisschen durchsteigt und mir helfen kann. Bin für jeden Tipp dankbar :toll:
Mein Ziel ist es, eine Klasse zu schaffen, die erstmal als Zeichenbrett für Rechtecke dienen soll. Diese Rechtecke werden per Maus "aufgezogen" (wie auf dem Windows-Desktop mit gedrückter Maustaste, man sieht also einen Rahmen), läßt man die Taste los, erscheint das Rechteck. Auf der Fläche soll man bis zu 10 Rechtecke zeichnen können.
So weit bin ich nun auch schon gekommen und es klappt wunderbar.
Nun würde ich gerne dazu übergehen, diese Rechtecke in einem Vektor zu speichern. Leider bin ich damit ein bisschen überfordert.
Hier mal mein Code:
Code:
public class ZeichenBrett extends Frame implements MouseListener, MouseMotionListener {
int counter = 0;
int max_images = 10;
int points_topleft[][] = new int[max_images][2];
int points_bottomright[][] = new int[max_images][2];
int points_dragg[][] = new int[1][2];
int data[][] = new int[max_images][4];
boolean dragged;
public ZeichenBrett() {
addMouseListener(this);
addMouseMotionListener(this);
addWindowListener(new WindowClosingAdapter());
setVisible(true);
}
public void mousePressed(MouseEvent e) {
if ( counter < max_images ) {
points_topleft[counter][0] = e.getX();
points_topleft[counter][1] = e.getY();
}
}
public void mouseDragged(MouseEvent e) {
if ( counter < max_images ) {
points_dragg[0][0] = e.getX();
points_dragg[0][1] = e.getY();
dragged = true;
repaint();
}
}
public void mouseReleased(MouseEvent e) {
if ( counter < max_images ) {
points_bottomright[counter][0] = e.getX();
points_bottomright[counter][1] = e.getY();
++counter;
repaint();
}
}
public void paint(Graphics g) {
if ( counter <= max_images ) {
if ( dragged ) {
int width_dragg = Math.abs(points_dragg[0][0] - points_topleft[counter][0]);
int height_dragg = Math.abs(points_dragg[0][1] - points_topleft[counter][1]);
g.setColor(Color.GREEN);
g.drawRect(points_topleft[counter][0], points_topleft[counter][1], width_dragg, height_dragg);
dragged = false;
}
for ( int i = 0; i < counter; ++i ) {
int width = Math.abs(points_bottomright[i][0] - points_topleft[i][0]);
int height = Math.abs(points_bottomright[i][1] - points_topleft[i][1]);
g.setColor(Color.BLUE);
g.drawRect(points_topleft[i][0], points_topleft[i][1], width, height);
data[i][0] = points_topleft[i][0];
data[i][1] = points_topleft[i][1];
data[i][2] = width;
data[i][3] = height;
}
}
}
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseMoved(MouseEvent e) { }
public static void main (String [] args) {
ZeichenBrett test = new ZeichenBrett();
test.setTitle("FotoView");
test.setSize(500, 350);
}
}
class WindowClosingAdapter extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
Meine erste Idee war, die 4 relevanten Daten pro Rechteck (Breite, Höhe, X/Y-Wert der linken oberen Ecke) in einem mehrdimensionalen Array (siehen oben, Array data) zu speichern und das dann in den Vektor zu packen.
Hört sich gut an, bekomme es aber irgendwie nicht umgesetzt...
Am Besten wäre es wohl, die Erstellung der Rechtecke in eine eigene Klasse zu packen und diese dann im Vektor zu speichern. Aber auch da hakt es irgendwie in meinen Gedanken (ist auch schon spät).
Was mich noch beschäftigt ist folgendes: mir war es nicht möglich, die Zeichenfläche mit einem JFrame umzusetzen, da die Rechtecke beim verändern des Fensters regelmäßig verschwunden sind. Mit dem normalen Frame klappt es ohne Probleme. Was könnte ich bei dem JFrame falsch gemacht haben, oder gibt es immer Probleme, wenn man direkt auf ein JFrame zeichnen will...?
Wow, erster Beitrag und dann gleich so lang. Hoffe, dass irgendjemand ein bisschen durchsteigt und mir helfen kann. Bin für jeden Tipp dankbar :toll: