Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    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);
    			}
    		});
    	}
    }

  2. #12
    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

  3. #13
    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

  4. #14
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Ma siii, devo per forza fare in quel modo perchè c'è un listener che mi controlla se un dato inserito sia corretto, allora devo decidere se farla vedere oppure no una stringa d'errore, e avendo un menù a tendina dal quale è possibile cambiare lingua, non posso settare una stringa in un modo direttamente alla scelta della lingua, perchè non è detto che ci sia un'errore, è da verificare, se non hai capito ti faccio un esempio, comunque grazie per il consiglio sull'uso dei "." piuttosto delle "/"

  5. #15
    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
    se non hai capito ti faccio un esempio
    Sì ... non ho proprio capito il problema ...
    Vediamo questo esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Ok ho modificato un po' il codice per farti capire cosa voglio fare e perchè mi sarebbe comoda una stringa modificabile

    codice:
    import java.awt.EventQueue;
    import java.util.Locale;
    import java.util.ResourceBundle;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JTextField;
    import java.awt.event.FocusAdapter;
    import java.awt.event.FocusEvent;
    
    
    
    
    public class esempio extends JFrame {
    
    
    	private JPanel contentPane;
    	private JTextField textField;
    	private JTextField textField_1;
    
    
    	/**
    	 * 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, 251);
    		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(150, 105, 250, 15);
    		contentPane.add(label);
    		
    		textField = new JTextField();
    		textField.setBounds(12, 105, 117, 19);
    		contentPane.add(textField);
    		textField.setColumns(10);
    		
    		textField_1 = new JTextField();
    		textField_1.setBounds(12, 136, 117, 19);
    		contentPane.add(textField_1);
    		textField_1.setColumns(10);
    		
    		JLabel label_1 = new JLabel("");
    		label_1.setBounds(150, 138, 250, 15);
    		contentPane.add(label_1);
    		
    		JButton btnControlla = new JButton("Controlla");
    		btnControlla.setBounds(12, 167, 117, 25);
    		contentPane.add(btnControlla);
    		
    		//stringhe
    		Locale italy = new Locale("it","IT"); // utilizzo l'italiano di default all' apertura del programma
    		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"); // Cosa che ovviamente non si fa ma è solo per far capire il concetto di ciò che vorrei fare
    			}
    		});
    		
    		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"); // idem
    			}
    		});
    		
    		btnControlla.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				String s = textField.getText();			// controllo che il numero inerito sia intero
    				if(!isInt(s)) {
    					label.setText(Stringa);
    				}
    				else  {
    					label.setText("");
    				}
    				String s1 = textField_1.getText();
    				if(!isInt(s1)) {
    					label_1.setText(Stringa);
    				}
    				else  {
    					label_1.setText("");
    				}
    			}
    		});
    		
    	}
    	
    	// metodi
    	private boolean isInt (String s) { // ho fatto un metodo bruto per controllare se il numero è un int
    		try {
    			Integer.parseInt(s);
    			return true;
    		}
    		catch(Exception e) {
    			System.out.println("Il numero non è intero");
    			return false;
    		}
    	}
    }

  7. #17
    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
    Ok ho modificato un po' il codice per farti capire cosa voglio fare e perchè mi sarebbe comoda una stringa modificabile
    E cosa ti impedisce di fare es.:

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

    Ovviamente il ResourceBundle sarebbe, meglio, da tenere in uno scope più ampio, ovvero come campo di istanza.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E cosa ti impedisce di fare es.:

    label.setText(bundle.getString("stringa"));
    ?
    Me lo impedisce il fatto che non so in che lingua sia così

  9. #19
    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
    Me lo impedisce il fatto che non so in che lingua sia così
    Che vuol dire!? Se tenessi una variabile di istanza per il ResourceBundle, la lingua è quella, ovviamente, dell'ultimo ResourceBundle che è stato caricato e assegnato alla variabile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #20
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Quindi dovrei mettere in public esempio

    codice:
    Locale italy = new Locale("it","IT");
    ResourceBundle bundle = ResourceBundle.getBundle("lang/trad", italy);
    nel listener del bottone italiano
    codice:
    Locale italy = new Locale("it","IT");
    bundle = ResourceBundle.getBundle("lang.trad", italy);
    In quello inglese:
    codice:
    Locale usa = new Locale("en","US");
    bundle = ResourceBundle.getBundle("lang.trad", usa);
    e poi se voglio settare la stringa mi basta fare:
    label.setText(bundle.getString("stringa"));

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.