Guten Morgen,
Auf folgender Zeichenflaeche lassen sich Objekte zeichnen, mit der Maus markieren und verschieben. Mit der Methode "auswaehlen" wird ein Objekt, das an der Position wo mit der Maus geklickt wurde liegt, ausgewählt, also als "ausgewaehltesObjekt" definiert, und kann nun verschoben werden. Mit dem Klicken auf ein anderes Objekt lässt sich wiederum dieses auswählen und verschieben.
Jedoch ist es nicht möglich, nachdem man einmal ein Objekt ausgewählt hat, gar keines zu selektieren.
Dies sollte doch möglich sein, indem man zum Beispeil die Variabel "ausgewaehltesObjekt" in irgendeiner Weise "zurücksetzt". Und zwar z.B. nachdem die Bedingungen in der "auswaehlen" Methode zum Auswählen, also das dort wo geklickt wurde, ein Objekt liegt, nicht zutreffen - dann sollte ausgewaehltesObjekt "nichts" mehr sein ("zurückgesetzt"). Man klickt also irgendwo - irgendwo wo kein Objekt ist - auf die Zeichenfläche und es wird das Objekt was selektiert war, deselektiert.
Mein Ansatz ist als Kommentar gekennzeichnet.
Der Quellcode der Zeichenfläche:
Danke für eure Hilfe
MfG
petterapamm
Auf folgender Zeichenflaeche lassen sich Objekte zeichnen, mit der Maus markieren und verschieben. Mit der Methode "auswaehlen" wird ein Objekt, das an der Position wo mit der Maus geklickt wurde liegt, ausgewählt, also als "ausgewaehltesObjekt" definiert, und kann nun verschoben werden. Mit dem Klicken auf ein anderes Objekt lässt sich wiederum dieses auswählen und verschieben.
Jedoch ist es nicht möglich, nachdem man einmal ein Objekt ausgewählt hat, gar keines zu selektieren.
Dies sollte doch möglich sein, indem man zum Beispeil die Variabel "ausgewaehltesObjekt" in irgendeiner Weise "zurücksetzt". Und zwar z.B. nachdem die Bedingungen in der "auswaehlen" Methode zum Auswählen, also das dort wo geklickt wurde, ein Objekt liegt, nicht zutreffen - dann sollte ausgewaehltesObjekt "nichts" mehr sein ("zurückgesetzt"). Man klickt also irgendwo - irgendwo wo kein Objekt ist - auf die Zeichenfläche und es wird das Objekt was selektiert war, deselektiert.
Mein Ansatz ist als Kommentar gekennzeichnet.
Der Quellcode der Zeichenfläche:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JPanel;
import java.awt.event.*;
public class Zeichenflaeche1 extends JPanel{
private int x1, y1, x2, y2, x3, y3, x4, y4;
private ArrayList<Bestandteil> formen;
private Bestandteil ausgewaehltesObjekt;
private int xVerschiebung;
private int yVerschiebung;
public Zeichenflaeche1(){
formen = new ArrayList();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
x1 = e.getX();
y1 = e.getY();
auswaehlen();
}
public void mouseReleased(MouseEvent e){
x2 = e.getX();
y2 = e.getY();
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
x3 = e.getX();
y3 = e.getY();
verschieben(ausgewaehltesObjekt);
}
public void mouseMoved(MouseEvent e){
x4 = e.getX();
y4 = e.getY();
}
}
);
}
public Dimension getPreferredSize(){
return new Dimension( 400, 400 );
}
public int anzahlObjekte(){
return formen.size();
}
public void paintComponent(Graphics g){
super.paintComponent( g );
Graphics2D g2d = (Graphics2D)g;
if (anzahlObjekte()>0){
for (Iterator i = formen.iterator(); i.hasNext();){
Bestandteil aktuellesTeil = (Bestandteil) i.next();
if(aktuellesTeil == ausgewaehltesObjekt){
g2d.setColor(Color.red);
}
else{
g2d.setColor(Color.black);
}
g2d.draw(aktuellesTeil.gibAktuelleFigur());
}
}
}
public void auswaehlen(){
if(anzahlObjekte() > 0){
for (Iterator i = formen.iterator(); i.hasNext();){
Bestandteil aktuellesTeil = (Bestandteil) i.next();
if(aktuellesTeil.xPosition < x1 && aktuellesTeil.yPosition < y1 && aktuellesTeil.xPosition+aktuellesTeil.breite > x1 && aktuellesTeil.yPosition+aktuellesTeil.tiefe > y1){
ausgewaehltesObjekt = aktuellesTeil;
xVerschiebung = ausgewaehltesObjekt.xPosition;
yVerschiebung = ausgewaehltesObjekt.yPosition;
}
// else{hier müsste ausgewaehltesObjekt zurückgesetzt werden
// }
}
}
}
public void verschieben(Bestandteil ausgewaehltesObjekt){
if(anzahlObjekte() > 0){
ausgewaehltesObjekt.xPosition = xVerschiebung +x3-x1;
ausgewaehltesObjekt.yPosition = yVerschiebung +y3-y1;
repaint();
}
}
public void ObjektHinzufuegen(Bestandteil bestandteil){
formen.add(bestandteil);
repaint();
}
public void aktualisiereListe(ArrayList objekte){
formen = objekte;
repaint();
}
}
Danke für eure Hilfe
MfG
petterapamm
Zuletzt bearbeitet: