Objekt vom panel entfernen

mhh einerseits geht es um Objekte einer Klasse, und andererseits darum, das diese Objekte der Klasse auf dem JPanel mit Hilfe von Rechtecken und Kreisen gezeichnet werden.
Und Ziel soll es sein, das das Rechteck oder der Kreis auf den mit der mittleren Maustaste gedrücket wird, entfernen wird , und auch das Objekt der Klasse zu entfernen. Dies schließt auch das Element in dem Vector ein. Den ich verwende, um mit den Objekten der Klasse zu arbeiten.

Gruß
Evo
 
Moin,

verständlich ist das schon alles, aber nur in einem geringerem Maße.

Erst einmal:
Wie genau zeichnest Du denn die Rechtecke/Kreise?
Über eine extra Objekt-Klasse oder willkürlich mit Hilfe von Graphics des JPanels?

Wäre auch vielleicht einfacher für uns, das ganze etwas besser nachvollziehen zu können,
wenn Du uns etwas Code darbietest.

Gruß,
Xan
 
Hallo,

die Rechtecke und Kreise die dort auf das Panel gebracht werden sollen,
dürfen diese sich überschneiden oder liegen die brav nebeneinander ?

Die Klasse(n) die die Formen repräsentieren, von welcher Klasse ist/sind
die abgeleitet ?

Diese Klasse kapselt dann sicher Position,Größe etc. der Form.

Etwas Code wäre sehr hilfreich, sonst wird das hier ein einziges herumgerate !

Gruß Jadix
 
Hey ihrs,

so okay ich versuche mal das Durcheinander ein wenig zu lichten, auch wenn mir das mit dem Code schwer fällt,aber ich hoffe ich kann euch das so zusammenstellen das ihr damit zurechtkommt.

also vorher noch die Rechtecke und Kreise können sich überlappen.
und ich habe eine Klasse für die Kreise (Vector Datenpunkte) -> x, y und eine Klasse für die Rechtecke (Vector Clusters) x,y und int für Nummer des Recheckes

so zeichnen tu ich die Objekte über diese Funktion
Code:
protected void paintComponent(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, getWidth(), getHeight());

        if (Datenpunkte != null) {
            for (int i = 0; i < Datenpunkte.size(); i++) {
                Datenpunkt p = (Datenpunkt) Datenpunkte.elementAt(i);
                if (!p.isFilled()) {
                    g.setColor(Color.BLACK);
                    g.drawOval(p.x - 5, p.y - 5, 10, 10);
                } else {
                    g.setColor(p.getFarbe());
                    g.fillOval(p.x - 5, p.y - 5, 10, 10);
                }
            }
        }
        if (Clusters != null) {
            for (int i = 0; i < Clusters.size(); i++) {
                Cluster p = (Cluster) Clusters.elementAt(i);                
                g.setColor(p.getFarbe());
                g.fillRect(p.x - 5, p.y - 5, 10, 10);
                g.setColor(Color.BLACK);
                g.drawRect(p.x- 5, p.y -5, 10, 10);
            }            
        }
    }
und die Funktion wird entweder aufgerufen wenn ich die Objekte mit der linken oder rechten Maustaste auf das Panel drücke, oder per Random über Textfelder, wo der Nutzer die Anzahl eingibt.

und das ist momentan der Code zur mittleren Maustaste, der das Objekt auf dem Panel und aus dem Vector löschen soll, erstmal nur für die Kreise sprich die Datenpunkte
Code:
        //Wenn die mittlere Maustaste gedrückt wurde
        if (evt.getButton() == MouseEvent.BUTTON2) {
            jPanel2.remove(getComponentAt(x, y));
            //Datenpunkte.remove(getComponentAt(x, y));
            Datenpunkte.removeElement(getComponentAt(x, y));
            repaint();
        }

wenn euch noch irgendwo ein Zusammenhang fehlt dann sagt Bescheid.

Gruß
Evo
 
Zuletzt bearbeitet:
Hallo,

somit fällt die getComponent-Methode schon einmal aus !

Du must deinen Vector wohl selbst nach Elementen dicht an der Cursorposition
durchsuchen und diese dann Löschen !

Gruß Jadix
 
Gut und wie muss ich das am besten anstellen
Wie ich einen Vector durchlaufe krieg ich noch raus das wird nicht so schwer sein, aber wie ist das mit der Cursorposition. Ich kann ja nicht sagen ==, ich muss ja von der Cursorposition ein bißchen mehr nehmen. weil der Kreis oder das Rechteck mehr als eine cursorpositionen einnehmen. Gibts da was?

Gruß
Evo
 
Zurück