Jest button, który tworzy obiekt nowej ramki i wyświetla go. Jak automatycznie przy stworzeniu nowej, zamknąć starą ramkę?
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.
Użyj funkcji dispose()
Jeśli pierwsza ramka będzie jeszcze wyświetlana, to nie używajdispose().
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
Raczej przy naciskaniu przycisku, bo łatwiej o referencję do okna... po co przekazywać ją do nowego...
Czyli w kodzie przycisku muszę wywołać obiekt stworzonej wcześniej ramki i ją zamknąć np. setVisible(false);
Tak.
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ąć?
}
});
}
}
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);
}
});
}
}
wielkie dzięki! :)