Instanzen erzeugen und vernichten

Status
Nicht offen für weitere Antworten.

klein-odd

Aktives Mitglied
Hallo !

Klasse MAIN besteht aus einem Fenster und zwei Knöpfe "mehr" und "weniger".
Code:
...

JButton mehr = new JButton("mehr");
mehr.addActionListener(this);
JButton weniger = new JButton("weniger");
weniger.addActionListener(this);
...

Beim Drücken auf "mehr" wird eine Instanz von NEBEN erzeugt:

Code:
public void actionPerformed(ActionEvent e)
{
    String cmd = e.getActionCommand();
    if(cmd.equals("mehr"))
        {
            NEBEN neben = new NEBEN();
        }
}

es erscheint ein Fenster mit einer Nummer im Titel nach folgendem code :

Code:
public class NEBEN
{
    public NEBEN()
    {
        JFrame window = new JFrame();
        window.setTitle(window.getName());
    }
}

ich brauche mit dem knopf "weniger" die angezeigten Fenster non NEBEN zu stückweise zu löschen,
wie kann ich den Listener erweitern ?

Code:
public void actionPerformed(ActionEvent e)
{
    String cmd = e.getActionCommand();
    if(cmd.equals("mehr"))
        {
            NEBEN neben = new NEBEN();
        }

    if(cmd.equals("weniger"))
        {
            ???????????????????
        }
}
[/code]
 
S

SlaterB

Gast
du musst dir die Neben-Objekte in einer Liste oder Array als Exemplarvariable speichern,
dann kannst du auch später daruf zugreifen und dispose() oder sonstwas aufrufen,

Tipp: versuche das ganze erstmal mit EINEM Fenster in einer einfachen Variable
 

ARadauer

Top Contributor
ja genau

Code:
....
Vector<NEBEN> nebenVector = new Vector<NEBEN>();


....

public void actionPerformed(ActionEvent e) 
{ 
    String cmd = e.getActionCommand(); 
    if(cmd.equals("mehr")) 
        { 
            NEBEN neben = new NEBEN(); 
            nebenVector.add(neben);
        } 

    if(cmd.equals("weniger")) 
        { 
            Neben temp = nebenVector.get(nebenVector.size());
            temp.setVisible(false);
            nebenVector.remove(nebenVector.size());
        } 
}


so ungefähr
 

klein-odd

Aktives Mitglied
Danke Euch beiden,

der Einfall mit dem Vektor hat das Gute an sich,
dass man die Elemente am Anfang oder am Ende
des Vektors direkt ansprchen kann und so kann man
die Objekte löschen, die zuletzt oder zuerst erstellt wurden.

Code:
NEBEN neb = (NEBEN) vector.firstElement();
neb.dispose();
vector.remove(neb);
oder
Code:
NEBEN neb = (NEBEN) vector.lastElement();
neb.dispose();
vector.remove(neb);

Ich weiss nicht warum ich das "casten" sollte (Tipp von Eclipse)
aber es hat schön funktioniert.

Der Computer speichert leider alles und jedes neu erzeugte
NEBEN kriegt neue "Ausweisnummer",
aber das ist vieleicht das Aroma.

Kann man sich überzeugen, dass die beseitigten Instanzen
nicht nur als JFrames vom Bildschirm weg sind
aber in der Tat nicht mehr existieren?

Ich danke jedenfalls.
 

ARadauer

Top Contributor
wenn du wirklich Vector<NEBEN> nebenVector = new Vector<NEBEN>(); geschrieben hast, ist eigentlich kein Cast notwendig.

Code:
Neben temp = nebenVector.get(nebenVector.size()); 
            temp.setVisible(false); 
            nebenVector.remove(nebenVector.size());

somit dürfte kein verweis mehr auf das objekt existieren und beim nächsten lauf des gc, ist es definitiv nicht mehr da
 
G

Gast

Gast
DANKR SCHÖN,

Im Prinzip war es eine kosmetische Frage,
weil die Instanzen, die ich evtl. vernischten würde,
in meiner Applikation sehr klein sind,
tun nichts mehr als nur auf dem Bildschirm aussehen,
und belasten den Arbeitsspeicher vermutlich nur geringfügig.

Ich wollte nur den gebliebenen Rest der Elemente im Vector
irgendwie demokratisch verwalten. So jabe ich mir angenommen,
wenn es nur drei Komponenten im Vektorbleiben,
sind der VM nur drei bekannt.

danke sehr, klein-odd
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben