Avatar billede dannv Nybegynder
25. august 2004 - 13:36 Der er 8 kommentarer og
1 løsning

removeWindowListener deaktiverer 'X' luk knap

Hejsa,

Jeg har en java applikation som består af en (AWT!!) frame, hvor jeg skfifter en panel ud afhængig af hvad brugeren skal se...

Nogle steder må brugerne gerne lukke vinduet vha. X i højre hjørne, mens i bestemte vinduer må de absolut ikke!

Hvordan implementerer jeg ovenstående. I øjeblikket gør jeg følgende når min frame kaldes (constructor)

addWindowListener(new java.awt.event.WindowAdapter(){
            public void windowClosing(java.awt.event.WindowEvent e)
            {
                ((Frame)e.getSource()).dispose();
                System.exit(0);
            }
        });   

Det betyder så at alle skærmbilleder kan lukkes vha af krydset, og det var jo ikke meningen!!
Avatar billede dannv Nybegynder
25. august 2004 - 13:46 #1
Bemærk skal jeg køre på jdk1.2.2
Avatar billede labanos Nybegynder
25. august 2004 - 16:05 #2
kunne laves simpelt ved at tilføje en boolean som fx "boolean allowClosing = true"... når du så skifter til et panel hvor man ikke må kunne lukke frame sætter du boolean'en til false... når du skifter tilbage til true... og din :
            {
                ((Frame)e.getSource()).dispose();
                System.exit(0);
            }
laver du om til:
            {
                if (allowClosing)
                {
                    ((Frame)e.getSource()).dispose();
                    System.exit(0);
                }
            }

Men det er måske ikke nogen "pæn" løsning... og jeg ved ikke lige om der findes en måde at "disable" krydset på istedet.. kan ikke lige se det på Frame i hvert fald..
Avatar billede dannv Nybegynder
01. september 2004 - 10:07 #3
Beklager har lige været fraværende...

ovenstående kan jeg ikke få til at fungerer...

Når jeg starter mit program, kalder jeg min frame, og det vil sige den bliver kun kaldt EEN gang i programmets levetid. Jeg skal bruge en eller anden dynamisk måde at tilføje eller fjerne window listener.

Til at udskifte panel i mit pr. bruger jeg en metode som hedder setCurrentPanel(Panel panel).
Avatar billede labanos Nybegynder
01. september 2004 - 10:58 #4
hvis setCurrentPanel ligger på din frame, så kunne du evt. smide en boolean med
den... fx
setCurrentPanel(Panel panel, boolean disableClosing)
herudover tilføjer du en boolean på din frame som fx.
boolean canBeClosed = true;
i din setCurrentPanel laver du noget ala:
if (disableClosing && canBeClosed) {
  frame.removeWindowListener(listener);//du bliver nødt til at lave din windowlistener som en konkret klasse istedet for den anonyme innerclass, ellers kan den ikke fjernes
  canBeClosed = false)
} else if (!disableClosing && !canBeClosed) {
    addWindowListener(listener);
}
Hvis du skal have hjælp til at lave den anonyme innerclass konkret så sig til...
Avatar billede dannv Nybegynder
02. september 2004 - 06:57 #5
jo tak, hvordan for jeg den anonyme klasse til en konkret??

Jeg har nemlig prøvet ovenstående, men kunne ikke få fat i min listener, nok fordi den var i en annonym, men dertil meget gerne hjælp!!!
Avatar billede labanos Nybegynder
02. september 2004 - 08:24 #6
class ApplicationTerminator extends WindowAdapter {
  public void windowClosing( WindowEvent e ) {
    ((Frame)e.getSource()).dispose();   
    System.exit(0);
  } 
}

Og i din frame kan du så lave:
ApplicationTerminator terminator = new ApplicationTerminator();
addWindowListener(terminator);
Avatar billede labanos Nybegynder
02. september 2004 - 08:26 #7
Du kan evt. smide terminatorklassen i samme java fil som din frame, bare du ikke laver den public class og smider den uden for framens class scope (altså den sidste "}" )
Avatar billede dannv Nybegynder
02. september 2004 - 11:10 #8
Stort, det kører....
smid et svar og points er på vej til dig!
Avatar billede labanos Nybegynder
02. september 2004 - 11:14 #9
k nice :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester