Visualizzazione dei risultati da 1 a 10 su 22

Hybrid View

  1. #1
    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
    Ho capito tutto tranne questo:
    1) Abituati a tenere i riferimenti ai componenti come variabili di istanza della tua classe.
    Questa è la parte più semplice ... è solo un aspetto logico/pratico.

    Se un ActionListener lo implementi ad esempio a livello della tua classe esempio e il JLabel label lo dichiari solo come locale al costruttore ... non lo puoi usare altrove.

    codice:
    public class esempio extends JFrame implements ActionListener {
        ....
        public esempio() {
            ....
            JLabel label = new JLabel("");
            ....
        }
    
        public void actionPerformed(ActionEvent e) {
            // qui ovviamente non potresti usare 'label'
        }
    }

    Quindi indipendentemente da quale è il design della tua classe e da come/dove implementi i listener, è sicuramente buona cosa se tieni i riferimenti ai componenti che poi usi molto come variabili di istanza piuttosto che come variabili locali.

    Quote Originariamente inviata da wasd28 Visualizza il messaggio
    Un' altra cosa, adesso non mi dà errori, ma comunque non mi traduce in inglese quando clicco sul bottone english, perchè?
    Il codice di per sé mi risulta corretto e adesso è anche corretto dal punto di vista dei Locale che vuoi cercare.

    Se hai i due file:
    trad_it_IT.properties
    trad_en_US.properties

    il tuo codice dovrebbe funzionare senz'altro. Se non funziona è probabile che non riesca a trovare i due properties. E se non trova nessuno dei due dovrebbe pure scatenare un bel java.util.MissingResourceException che dovresti vedere sulla console.

    I bundle di risorse vengono cercati usando un ClassLoader, ovvero sfruttando la ricerca lungo il "classpath". La directory che contiene i due file di properties deve essere in classpath. Se non sai ancora bene del classpath, l'argomento è assolutamente da approfondire.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quindi indipendentemente da quale è il design della tua classe e da come/dove implementi i listener, è sicuramente buona cosa se tieni i riferimenti ai componenti che poi usi molto come variabili di istanza piuttosto che come variabili locali.
    Certo ho capito perfettamente quello che vuoi dire adesso, ma io i listener li ho dichiarati internamente a public esempio() non esternamente, e la label riesco a usarla tranquillamente poichè è tutto interno ad esempio()

    Comunque avevo sbagliato una cavolata, mi ero dimenticato il .properties nella traduzione in inglese hahaha , il programma adesso funziona alla grande, fa quello che voglio che faccia, provo ad applicare queste modifiche sul programma originale di partenza, non dovrei riscontrare problemi, almeno lo spero, grazie mille sei stato molto utile

  3. #3
    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
    Certo ho capito perfettamente quello che vuoi dire adesso, ma io i listener li ho dichiarati internamente a public esempio() non esternamente, e la label riesco a usarla tranquillamente poichè è tutto interno ad esempio()
    Certo, certo, nel tuo caso è ok. Lo dicevo giusto in generale per te, in futuro. Immagina di avere un programma ben più complesso, con 20/30 componenti .... non è particolarmente bello e "leggibile" fare tutto nel costruttore sparpagliando lì dentro variabili final e anonymous inner class!
    Prendilo appunto come suggerimento per altri sviluppi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Perfetto, altro problema (giuro questo è l'ultimo poi non rompo più). Devo per forza utilizzare una variabile che sia modificabile all'interno di un listener, però deve essere per forza final? Non è possibile fare una cosa del genere? (So che non si può, dà degli errori e so benissimo che deve essere per forza final ma non esiste un'alternativa?)

    codice:
    import java.awt.EventQueue;
    
    
    
    
    public class esempio extends JFrame {
    
    
    	private JPanel contentPane;
    
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					esempio frame = new esempio();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    
    	/**
    	 * Create the frame.
    	 */
    	public esempio() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 101);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		
    		JButton btnItaliano = new JButton("Italiano");
    		btnItaliano.setBounds(12, 12, 117, 25);
    		contentPane.add(btnItaliano);
    		
    		JButton btnInglese = new JButton("English");
    		btnInglese.setBounds(12, 43, 117, 25);
    		contentPane.add(btnInglese);
    		
    		
    		final JLabel label = new JLabel("");
    		label.setBounds(164, 29, 250, 15);
    		contentPane.add(label);
    		
    		//stringhe
    		Locale italy = new Locale("it","IT");
    		ResourceBundle bundle = ResourceBundle.getBundle("lang/trad", italy);
    		final String Stringa = bundle.getString("stringa");
    		
    		//listener
    		
    		btnItaliano.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				Locale italy = new Locale("it","IT");
    				ResourceBundle bundle = ResourceBundle.getBundle("lang/trad", italy);
    				Stringa = bundle.getString("stringa");
    				label.setText(Stringa);
    			}
    		});
    		btnInglese.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				Locale usa = new Locale("en","US");
    				ResourceBundle bundle = ResourceBundle.getBundle("lang/trad", usa);
    				Stringa = bundle.getString("stringa");
    				label.setText(Stringa);
    			}
    		});
    	}
    }

  5. #5
    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
    Perfetto, altro problema (giuro questo è l'ultimo poi non rompo più).
    No prob., tanto oggi è festa, sono a casa e non ho altro da fare.

    Quote Originariamente inviata da wasd28 Visualizza il messaggio
    Devo per forza utilizzare una variabile che sia modificabile all'interno di un listener, però deve essere per forza final? Non è possibile fare una cosa del genere? (So che non si può, dà degli errori e so benissimo che deve essere per forza final ma non esiste un'alternativa?)
    Infatti non compila ... stai cercando di assegnare qualcos'altro alla variabile Stringa, che è final proprio perché stai cercando di assegnarci qualcosa dalla anonymous inner class.

    Ma perché devi proprio fare così? La stringa ti serve solo "al volo" per passarla a setText.
    Al limite potresti anche fare addirittura:

    label.setText(bundle.getString("stringa"));

    nessuna variabile String servirebbe! Quindi perché ti stai sforzando (dai pure oggi che è festa ) di cercare di fare qualcosa che ha relativamente poco senso e ti causa solo problemi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #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
    ResourceBundle bundle = ResourceBundle.getBundle("lang/trad", italy);
    P.S. nel basename non dovresti usare '/'. La documentazione dice che getBundle non è così "pignolo" (per compatibilità con le vecchie versioni) e accetta anche '/' ma che sarebbe meglio specificare un fully qualified class name.

    Se "lang" è il package in cui hai i file di properties e "trad" è il nome base, allora:

    getBundle("lang.trad", italy)
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.