Avatar billede it-dyret Nybegynder
31. maj 2010 - 11:52 Der er 6 kommentarer og
1 løsning

Locale.setDefault on the fly ændrer ikke tekst i f.eks. JFileChooser

Jeg har en applikation, hvor brugeren har mulighed for at skifte sprog on the fly. Når det sker, så kalder jeg "Locale.setDefault" med deres valg, men det har ingen effekt, når jeg efterfølgende åbner en ny JFileChooser, hvor teksterne stadig er i det oprindelige sprog.

Hvis jeg bruger Locale.setDefault ved opstart af applikationen, kan jeg godt styre teksterne i f.eks. JFileChooser.

Hvad mangler jeg at gøre for at få det til at fungere on the fly?
Avatar billede arne_v Ekspert
31. maj 2010 - 16:07 #1
Der var jo muligheden af at være grov og kalde setLocale på JFileChooser !

Evt. en rekursiv metode som sætter på alle komponenter under content pane !!
Avatar billede it-dyret Nybegynder
31. maj 2010 - 18:04 #2
Ja, det var naturligvis en mulighed, men det er en større applikation med små 100.000 linjers kode, som startede ud som en et-sprog applikation og nu skal gøres multisproget. Så jeg vil meget gerne undgå at skulle hele applikationen igennem for at finde objekter, som skal tvangsfodres med en ændret Locale...

Jeg havde forventet, at man nemt kunne ændres Locale on the fly ved f.eks. blot at kalde en set-/update metode - og håber fortsat, at det er en mulighed.
Avatar billede arne_v Ekspert
31. maj 2010 - 18:31 #3
Jeg er ikke helt sikker på at jeg forstår problemet.

du kalder:

setRecursiveLocale(dinframe.getContentPane(), dinnyelocale);

setRecursiveLocale sætter så locale på første argument og kalder sig selv med alle under komponenter.

Uanset hvor mange JPanel's, JLabel's, Jhvadsomhelst der er, så skulel det jo få ram på det hele.

Og setDefault kan så bruges til at klare nye komponenter som tilføjes senere.
Avatar billede it-dyret Nybegynder
31. maj 2010 - 20:36 #4
Du (arne_v) har ledt mig i den rigtige retning, da du naturligvis har ret i, at jeg kan optage eksisterende J-objekter ved rekursivt at kalde setLocale(Locale) på dem.

Jeg havde dog det yderligere problem, at jeg ikke kunne forstå, hvorfor nye J-objekter (såsom JFileChooser) fortsat havde den oprindelige Locale, når jeg forinden initialiseringen af dem havde kaldt Locale.setDefault(Locale). Men hvis jeg kalder JComponent.setDefaultLocale(Locale), så forsvinder problemet, og nye JFileChoosers bliver initialiseret med den rette Locale.

Jeg forstår dog ikke, hvorfor Locale.setDefault(Locale) ikke gør jobbet i sig selv, men det kan du måske forklare mig?

Under alle omstændigheder må du gerne smide et svar, så jeg kan belønne dig.
Avatar billede it-dyret Nybegynder
31. maj 2010 - 20:37 #5
Der skulle have stået følgende i første afsnit:

"Du (arne_v) har ledt mig i den rigtige retning, da du naturligvis har ret i, at jeg kan opdatere eksisterende J-objekter ved rekursivt at kalde setLocale(Locale) på dem."
Avatar billede arne_v Ekspert
31. maj 2010 - 22:03 #6
svar
Avatar billede arne_v Ekspert
31. maj 2010 - 22:07 #7
Hvis Locale.setDefault ikke virker men JComponent.SetDefaultLocale gør så tyder det på at der sættes en static variabel med Locale meget tidligt f.eks. når første class som arver fra Jetellerandet loades.
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

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