Visualizzazione dei risultati da 1 a 10 su 22

Visualizzazione discussione

  1. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da wasd28 Visualizza il messaggio
    Ecco so che ho sbagliato qua, ma potresti spiegarmi un po' meglio, ho creato un programma semplicissimo apposta perchè voglio capire dove sbaglio, correggimi tu, il programma non funziona, perchè se devo mettere la label final e modificarla non si può!

    e poi ovviamente in src ho creato i due file trad_it_IT.properties con scritto stringa = Questo è un esempio per HTML.it e trad_en_US.properties con scritto stringa = This is an example for HTML.it
    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ù.
    Ultima modifica di andbin; 25-04-2014 a 12:06
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.