/ 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
Focus Lost -- men til hvem?
Fra : Anders Jørgensen


Dato : 28-02-02 12:02

Jeg har en Frame i et GUI (Swing, jdk1.3.1), hvor jeg bl.a. har et par
tekstfelter og OK/CANCEL knapper. Når jeg tabber/klikker ud af et
tekstfelt, og det får en FocusEvent med focusLost, tjekker FocusEvent
handleren om det indtastede opfylder nogle krav, og hvis ikke, kommer
der en fejl-dialogboks. Når der OK'es til denne sættes focus tilbage i
tekstfeltet med fejlen.

Nu er problemet jo så, hvis jeg har ugyldig data i et felt, og vil give
op og trykke CANCEL. Trykket på CANCEL resulterer i at fokus forsvinder
fra tekstfeltet, så min "validator"-kode bliver kørt. Men lige netop i
CANCEL tilfældet ønsker jeg ikke dette.

Hvordan fikser man den? Kan man på en eller anden måde se (fra FocusLost
eventen), hvor fokus forsvinder hen, og se om det er CANCEL-knappen?
Eller er der en anden smart løsning?

mvh Anders Jørgensen


 
 
Peter Lind (01-03-2002)
Kommentar
Fra : Peter Lind


Dato : 01-03-02 21:40


"Anders Jørgensen" <anj@iocon.dk> wrote
>Jeg har en Frame i et GUI (Swing, jdk1.3.1), hvor jeg bl.a. har et par
>tekstfelter og OK/CANCEL knapper.
>
>[...eksempel på focusLost klippet...]
>
>Hvordan fikser man den? Kan man på en eller anden måde se (fra FocusLost
>eventen), hvor fokus forsvinder hen [...]
>Eller er der en anden smart løsning?

Det korte svar - Den smarte løsning er at skifte til jdk1.4, hele
focus-systemet er blevet ændret, da du bestemt ikke er den første med denne
type problem.
Hvis du umiddelbart har mulighed for at skifte, og sætte dig ind i det nye
focus-system, så vil det nok være det nemmeste (jeg kan ikke sige præcis
hvordan du så skal løse problemet, for jeg har kun selv lige skimmet
dokumentationen).

Hvis du ikke har mulighed for at skifte til 1.4, så må det være noget med en
focusGained på CANCEL knappen, der sætter et eller andet flag, som din
validerings-kode checker for. Der kommer dog sikkert en masse bøvl med
trådning, og hvad der sker først og så videre. Men sig til når du når så
langt...

mvh
Peter Lind



Anders Jørgensen (04-03-2002)
Kommentar
Fra : Anders Jørgensen


Dato : 04-03-02 11:09

Peter Lind wrote:

> "Anders Jørgensen" <anj@iocon.dk> wrote
>
>>Jeg har en Frame i et GUI (Swing, jdk1.3.1), hvor jeg bl.a. har et par
>>tekstfelter og OK/CANCEL knapper.
>
> Det korte svar - Den smarte løsning er at skifte til jdk1.4, hele
> focus-systemet er blevet ændret, da du bestemt ikke er den første med denne
> type problem.


Det var interessant! Jeg kan muligvis godt skifte til 1.4 ...

> Hvis du ikke har mulighed for at skifte til 1.4, så må det være noget med en
> focusGained på CANCEL knappen, der sætter et eller andet flag, som din
> validerings-kode checker for. Der kommer dog sikkert en masse bøvl med
> trådning, og hvad der sker først og så videre.


Det var præcis planen, hvis der ikke fandtes en pænere løsning.
Problemet er, som du selv forudser, at FocusEvent'en (focusLost) kommer
først, og derefter kommer actionEvent'en på CANCEL-knappen. Og begge
handlere kører i GUI-tråden. Jeg har overvejet lidt om
SwingUtilities.invokeLater() kunne hjælpe mig, da CANCEL-knap-eventen jo
nok er kommet i kø på det tidspunkt hvor jeg håndterer focusLost. Og så
kunne jeg få min validerings-kode til at køre efter CANCEL-knap event'en
og starte med at checke om jeg var blevet cancel'ed i mellemtiden.

Men det har jeg ikke fået prøvet endnu ...

Tak for svaret!

mvh Anders


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

Månedens bedste
Årets bedste
Sidste års bedste