/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Netbeans + Jpanel-tabremove problem
Fra : VK


Dato : 06-02-08 17:56

Hej!

Jeg har en TabbedPanel med flere tabs (Jpanels).
Jeg vil gerne have, at alle tabs'erne bliver initialiseret i starten,
men ikke all vist i appleten. Efter Appleten er startet, hentes der
nogen data, som så bestemmer om der skal vises flere paneller eller ej.

Jeg bruger Netbeans, hvor det meste af initialiseringskoden bliver
genereret af IDE'et selv. Efter iniCompenents() har eksekveret
(initialisering af samtlige komponenter på Appleten), skjuler jeg de
unødvendige paneller med:
MAINPANEL.remove(panelX); //hvor MAINPANEL er den store TabbedPanel og
panelX er en af de tabs der sidder på MAINPANEL.

Jeg lytter samtidig om der er blevet valgt et eller andet panel med
ComponentShown event listener, som så sætter et flag højt, når panelet
er valgt.

>Mit problem er, at selvom de paneller der er blevet skjult med
remove(),bliver der stadig fyret ComponentShown event, og den bliver ved
med det!
Med andre ord, reagerer Appleten, som om de skulte paneler altid er vist
(Shown). Dette sker ikke med andre, ikke skulte efter initComponents()
rutinen :-?

 
 
Frederik Hansen (07-02-2008)
Kommentar
Fra : Frederik Hansen


Dato : 07-02-08 08:46

Hej,

Jeg har prøvet at genskabe din oplevelse.. Og jeg kan også se at Shown
bliver kaldt.. Men kun i det jeg Remove'er dem, ikke når jeg klikker på
de andre synlige tabs. Kan du ændre på din kode, sådan at når du remover
dem, så sætter du et flag, som gør at Shown-kaldet bliver ignorert? Der
er naturligvis et samtidighedsproblem/udfordring, du lige skal have styr på.


VK wrote:
> Hej!
>
> Jeg har en TabbedPanel med flere tabs (Jpanels).
> Jeg vil gerne have, at alle tabs'erne bliver initialiseret i starten,
> men ikke all vist i appleten. Efter Appleten er startet, hentes der
> nogen data, som så bestemmer om der skal vises flere paneller eller ej.
>
> Jeg bruger Netbeans, hvor det meste af initialiseringskoden bliver
> genereret af IDE'et selv. Efter iniCompenents() har eksekveret
> (initialisering af samtlige komponenter på Appleten), skjuler jeg de
> unødvendige paneller med:
> MAINPANEL.remove(panelX); //hvor MAINPANEL er den store TabbedPanel og
> panelX er en af de tabs der sidder på MAINPANEL.
>
> Jeg lytter samtidig om der er blevet valgt et eller andet panel med
> ComponentShown event listener, som så sætter et flag højt, når panelet
> er valgt.
>
> >Mit problem er, at selvom de paneller der er blevet skjult med
> remove(),bliver der stadig fyret ComponentShown event, og den bliver ved
> med det!
> Med andre ord, reagerer Appleten, som om de skulte paneler altid er vist
> (Shown). Dette sker ikke med andre, ikke skulte efter initComponents()
> rutinen :-?

VK (07-02-2008)
Kommentar
Fra : VK


Dato : 07-02-08 17:12

Jeg takker for det hurtige svar!
Jeg løste problemet med at fjerne event-listeners af den pågældende
component:

try
{
comp = MAINPANEL.getComponent(comp_nr); //comp nr.
}
catch (ArrayIndexOutOfBoundsException zz)
{
System.err.println("Component nr "+comp_nr+" doesn't exist!");
}
//henter samtlige listeners af componentet
ComponentListener[] listeners = comp.getComponentListeners();
for(int x = 0,y = listeners.length; x < y; x++)
{
comp.removeComponentListener(listeners[x]);
}
   //fjerner tabben
MAINPANEL.remove(panel_name);

Man skal bare lige være opmærksom på, at når man fjerner listeners, skal
de fjernes fra den sidste component først, altså, først tabnr. 3,2,1,0

Efter INSERT, adder jeg component listeners, og wupti



Frederik Hansen wrote:
> Hej,
>
> Jeg har prøvet at genskabe din oplevelse.. Og jeg kan også se at Shown
> bliver kaldt.. Men kun i det jeg Remove'er dem, ikke når jeg klikker på
> de andre synlige tabs. Kan du ændre på din kode, sådan at når du remover
> dem, så sætter du et flag, som gør at Shown-kaldet bliver ignorert? Der
> er naturligvis et samtidighedsproblem/udfordring, du lige skal have styr
> på.
>
>
> VK wrote:
>> Hej!
>>
>> Jeg har en TabbedPanel med flere tabs (Jpanels).
>> Jeg vil gerne have, at alle tabs'erne bliver initialiseret i starten,
>> men ikke all vist i appleten. Efter Appleten er startet, hentes der
>> nogen data, som så bestemmer om der skal vises flere paneller eller ej.
>>
>> Jeg bruger Netbeans, hvor det meste af initialiseringskoden bliver
>> genereret af IDE'et selv. Efter iniCompenents() har eksekveret
>> (initialisering af samtlige komponenter på Appleten), skjuler jeg de
>> unødvendige paneller med:
>> MAINPANEL.remove(panelX); //hvor MAINPANEL er den store TabbedPanel
>> og panelX er en af de tabs der sidder på MAINPANEL.
>>
>> Jeg lytter samtidig om der er blevet valgt et eller andet panel med
>> ComponentShown event listener, som så sætter et flag højt, når panelet
>> er valgt.
>>
>> >Mit problem er, at selvom de paneller der er blevet skjult med
>> remove(),bliver der stadig fyret ComponentShown event, og den bliver
>> ved med det!
>> Med andre ord, reagerer Appleten, som om de skulte paneler altid er
>> vist (Shown). Dette sker ikke med andre, ikke skulte efter
>> initComponents() rutinen :-?

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste