Identyfikacja okien typu JPanel

0

Kazde stworzone okno jest przechowywane w tablicy typu Vector

Vector lista_okien = new Vector();
lista_okien.addElement(new JPanel());

oki tak to mniiej wiecej wyglada, problem polega na tym iz w moim programie mozna takich okien stworzyć 8 , potrzebna jest mozliwosc ich identyfikacji przy zdazeniu zamkniecia okna ,zdarzenie jest prawidlowo obslugiwane, tylko jak pobrać np index zamyknago okna , badz jakis inny jednoznaczny identyfikator obiektu JPanel

umiem pobrac index ostatniego zamyknaego okna co nie jest problemem.

0

Mozesz uzyc metody Vectora indexOf. Poda Ci index Panelu podanego jako parametr. A ogolnie to wystarczy porownac obiekty ze soba operatorem ==, ktory sprawdzi referencje, a zatem jednoznacznosc obiektu.

pozdrawiam
johny

0

Niestety indexOf() nie rozwiazuje mojego problemu bo owszem podaje mi indeks zamyknaego okna ale ostatniego dodanego do Vectora , wiedz dziala prawidlowo tylko wtedy gdy zamykam okna od konca,
natomiasta ja chce miec mozliwosc otworzenia 8 okien i tak przechwycic zdarzenie zeby np. przy zamknieciu okna 2 wyswietlic komuniat zamknoles okno 2 czyli tak aby niezaleznie w jakiej kolejnosci zamkne okna dalo sie zidentyfikowac ktore zostalo zamkniete.

W taki sposób dodaj obiekty JPanel do Vectora :

Vector lista_okien = new Vector(); 
JPanel panelik = null;
lista_okien.addElement(panelik = new JPanel());

obsluga zdarzenia zamkniecia okna wyglada tak (dziala poprawnie):

class Closer extends WindowAdapter {

    public void windowClosing(WindowEvent e) {

}
}
0

indexOf() jak najbardziej rozwiązuje Twój problem, pod warunkiem, że użyjesz go prawidłowo. Domyślam się, że panele, które tworzysz dodajesz do okienek np JFrame. Zdarzenie zamknięcia okna jest wywoływane przez okienko, czyli w metodzie wondowClosing przez e.getSource() otrzymasz referencję do obiektu klasy JFrame. Ty potrzebujesz JPanel. Jeśli założyć, że twoje panele są głównymi panelami okienek możesz je pobrać przez getContentPane().

0

W moim programie obiekty JPanel sa niezaleznymi oknami ktore przechowuje w kontenerze i niec wiecej

indeks=lista_okien.indexOf(e.getSource());

wiec metoda getSource() powinno zwracac wlasnie referencje do JPanel , ale tak nie jest (pewnie sie myle), a jesli tak to jak odwolac sie do panelu przez metode getContentPane() ?? bo nie wiem w jaki sposob jej uzyc.

System.out.println(e.getSource())

zwraca Video_conf$New_Cam[frame0,0,250,256x245,layout=java.awt.BorderLayout,title=Rozmowa: 0,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane
[,4,30,248x211,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,
flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]

0
celmar napisał(a)

W moim programie obiekty JPanel sa niezaleznymi oknami ktore przechowuje w kontenerze i niec wiecej

Z tego co piszesz wynika, że istnieje sposób na wyświetlenie JPanela bez użycia dodatkowych klas. Problem polega na tym, ze nie ma takiego sposobu ;). Zawsze musisz użyć dodatkowej klasy np. Window, Frame, JFrame, JDialog itp. Jeśli twoje okienka to JFrame'y rozwiązanie wygląda tak:

JFrame okienko = (JFrame)e.getSource();
int indeks=lista_okien.indexOf(okienko.getContentPane());

Jeśli powyższy kod nie działa podaj kod, który wykonywany jest na wektorze paneli (przy tworzeniu okienek).

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