Ok ... prima avevo capito un'altra cosa ma ora vedendo il codice è tutto chiaro.
Il problema non è il final! La variabile 'label' tecnicamente deve essere final affinché sia usabile nelle due anonymous inner-class. Ma il fatto che è final significa solo che non puoi assegnare un altro oggetto JLabel alla variabile 'label' .... non che è proibito invocarci metodi es. setText.
Il vero problema sono i Locale! Locale.ITALIAN è solo "it" ... non "it_IT" e Locale.ENGLISH è solo "en" ... non "en_US".
Insomma, "it" (italiano) è più generico sia di "it_IT" (italiano in Italia) sia es. di "it_CH" (italiano in Svizzera).
Quindi "it" non va a prendere trad_it_IT.properties .... potrebbe invece trovare trad_it.properties
Idem per l'inglese.
E inoltre il codice così come l'hai postato non compila, perché stringa viene cercato come variabile che non esiste.
label.setText(""+bundle.getString(stringa)); // NO, Cerca una variabile di nome stringa che non esiste nel tuo codice
label.setText(""+bundle.getString("stringa")); // OK
Nota che il ""+ non serve ... getString dà già un String.
EDIT: aggiungo una cosa, giusto per chiarezza. Se hai solamente:
trad_it_IT.properties
trad_en_US.properties
se usi Locale.ITALIAN o Locale.ENGLISH nessuno di questi due Locale va a prendere i tuoi properties. Ma il ResourceBundle potrebbe comunque prendere trad_it_IT.properties ... perché?
Perché se hai il PC come è configurato il mio, ovvero lingua italiana per l'Italia, il Locale di "default" della piattaforma è "it_IT". Se ResourceBundle non trova nulla con il Locale specificato a getBundle, usa un meccanismo di "fallback" e cerca con il Locale di default. E "it_IT" può trovare appunto trad_it_IT.properties.
NOTA: Già che ci sono, ti segnalo alcune cose in generale:
1) Abituati a tenere i riferimenti ai componenti come variabili di istanza della tua classe. Es.:
codice:public class esempio extends JFrame { private JPanel contentPane; private JLabel label; // <------ .....
Ti facilita di molto le cose, specialmente se i componenti devono essere usati anche da altri metodi della classe. Se non li vuoi tenere tutti, tieni almeno quelli con cui sai che devi interagire in seguito alla creazione della interfaccia.
2) Un MouseListener ovviamente è tecnicamente corretto sui pulsanti JButton ma se ti serve solo sentire la "azione" del pulsante c'è un listener più appropriato: ActionListener che ha public void actionPerformed(ActionEvent e)
Abituati ad usarlo sui pulsanti/menù.![]()


Rispondi quotando