Swing, JFrame, automatycznie zamknięcie

0

Jest button, który tworzy obiekt nowej ramki i wyświetla go. Jak automatycznie przy stworzeniu nowej, zamknąć starą ramkę?

0

Nie wiem, czy się nie mylę, ale ustaw setVisible(false) i przypisz oknu nulla - intuicja mi mówi, że GC się nim zajmie, ale niech ktoś to potwierdzi, bo sam jestem ciekaw.

0

Użyj funkcji dispose()

0

Jeśli pierwsza ramka będzie jeszcze wyświetlana, to nie używajdispose().

0

no dobra, ale jak użyć tych funkcji
w main np tworze obiekt ramki, która wyświetla okno razem z przyciskiem. ten przycisk wywołuje nową ramkę i jak ma wyglądać warunek zamykający pierwsza? czy ta instrukcja ma być zawarta w przycisku czy kodzie nowej ramki?
Proszę o jakiś przykład

0

Raczej przy naciskaniu przycisku, bo łatwiej o referencję do okna... po co przekazywać ją do nowego...

0

Czyli w kodzie przycisku muszę wywołać obiekt stworzonej wcześniej ramki i ją zamknąć np. setVisible(false);

0

Tak.

0

tylko, że nie wiem jak to zrobić...

powiedzmy, że mamy taki kod:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class NowaRamka {
    public static void main(String[] args) {
        Ramka r = new Ramka();
        r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        r.setVisible(true);
    }
}

class Ramka extends JFrame {
    public Ramka() {
        setSize(320, 240);

        Panel p = new Panel();
        Container c = getContentPane();
        c.add(p);
    }
}

class Panel extends JPanel {
    public Panel() {
        JButton b = new JButton("Nowe okno");
        add(b);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //no i jakie instrukcje tu powinny być poza wywołaniem nowej ramki? W jaki sposób odwołać się do obiektu pierwszej ramki i ją zamknąć?
            }
        });
    }
}
0

Na przykład tak:

class Ramka extends JFrame {
    public Ramka() {
        setSize(320, 240);

        Panel p = new Panel(this);
        Container c = getContentPane();
        c.add(p);
    }
}

class Panel extends JPanel 
{
    final private Ramka parent;
    public Panel(final Ramka parent)
    {
        this.parent=parent;
        JButton b = new JButton("Nowe okno");
        add(b);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //no i jakie instrukcje tu powinny być poza wywołaniem nowej ramki? W jaki sposób odwołać się do obiektu pierwszej ramki i ją zamknąć?
                parent.setVisible(false);
            }
        });
    }
}
0

wielkie dzięki! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1