Identyfikacja okien typu JPanel

Odpowiedz Nowy wątek
2006-07-18 20:05
celmar
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.

Pozostało 580 znaków

2006-07-18 20:08
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


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-07-20 14:10
celmar
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) {

}
}

Pozostało 580 znaków

2006-07-20 14:30
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().


Pozostało 580 znaków

2006-07-21 19:59
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]

Pozostało 580 znaków

2006-07-22 23:18
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).


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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