Bene,
intanto ti ringrazio tanto per la risposta.
Dunque, il funzionamento dell'oggetto locale mi è abbastanza chiaro, infatti funziona.
Il procedimento che ho adottato è proprio settare il
Locale.setDefault(Locale.ITALY); (o la lingua che voglio)
caricare il bundle:
[code]
ResourceBundle Messages = ResourceBundle.getBundle("sizingtool.messages");
[/cod€]
e poi riportare i valori, per esempio:
codice:
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
Questo funziona alla grande, purchè sia dentro l'evento della voce di menu che premo:
codice:
JMenuItem mntmItalian = new JMenuItem(Messages.getString("IR_SizingTool.mntmItalian.text"));
mntmItalian.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Locale.setDefault(Locale.ITALY);
ResourceBundle Messages = ResourceBundle.getBundle("sizingtool.messages");
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title")); ---questo funziona comunque
mnFile.setText(Messages.getString("IR_SizingTool.mnFile.text")); --questo funziona, a patto che dichiaro mnFile come final
mnLanguage.setText(Messages.getString("IR_SizingTool.mnLanguage.text")); --questo funziona, a patto che dichiaro mnLanguage come final
}
});
Allora, questo codice funziona perfettamente, ma dovrei ripetere tutti gli assegnamenti n volte quante sono le lingue. Questo perchè non sono capace di estrapolare in un metodo tutte queste ripetizioni...mi spiego: io vorrei questo:
codice:
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
mnFile.setText(Messages.getString("IR_SizingTool.mnFile.text"));
mnLanguage.setText(Messages.getString("IR_SizingTool.mnLanguage.text"));
...
...racchiuso in un metodo da richiamare ogni volta che cambio lingua.
Ho provato a fare:
codice:
public void cambiaLingua()
{
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
mnFile.setText(Messages.getString("IR_SizingTool.mnFile.text"));
mnLanguage.setText(Messages.getString("IR_SizingTool.mnLanguage.text"));
...
}
...ma non so dove metterla.
Questo è a grandi linee il mio codice, almeno le parti rilevanti:
codice:
package sizingtool;
import java.awt.EventQueue;
...
public class IR_SizingTool {
private JFrame frmIrSizingTool;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
IR_SizingTool window = new IR_SizingTool();
window.frmIrSizingTool.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public IR_SizingTool() {
initialize();
}
public void initialize() {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (UnsupportedLookAndFeelException e) {
}
catch (ClassNotFoundException e) {
}
catch (InstantiationException e) {
}
catch (IllegalAccessException e) {
}
frmIrSizingTool = new JFrame();
frmIrSizingTool.setIconImage(Toolkit.getDefaultToolkit().getImage(IR_SizingTool.class.getResource("/images/IR.PNG")));
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
frmIrSizingTool.setBounds(100, 100, 450, 300);
frmIrSizingTool.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmIrSizingTool.getContentPane().setLayout(null);
JMenuBar menuBar = new JMenuBar();
menuBar.setBounds(0, 0, 442, 23);
frmIrSizingTool.getContentPane().add(menuBar);
final JMenu mnFile = new JMenu(Messages.getString("IR_SizingTool.mnFile.text_1"));
mnFile.setFont(new Font("Dialog", Font.PLAIN, 12));
menuBar.add(mnFile);
JMenuItem mntmOpen = new JMenuItem(Messages.getString("IR_SizingTool.mntmOpen.text_1"));
mntmOpen.setHorizontalAlignment(SwingConstants.LEFT);
mntmOpen.setFont(new Font("Dialog", Font.PLAIN, 12));
mnFile.add(mntmOpen);
JMenuItem mntmExit = new JMenuItem(Messages.getString("IR_SizingTool.mntmExit.text"));
mntmExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
mntmExit.setHorizontalAlignment(SwingConstants.LEFT);
mntmExit.setFont(new Font("Dialog", Font.PLAIN, 12));
mnFile.add(mntmExit);
final JMenu mnLanguage = new JMenu(Messages.getString("IR_SizingTool.mnLanguage.text"));
mnLanguage.setFont(new Font("Dialog", Font.PLAIN, 12));
menuBar.add(mnLanguage);
JMenuItem mntmEnglish = new JMenuItem(Messages.getString("IR_SizingTool.mntmEnglish.text"));
mntmEnglish.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Locale.setDefault(Locale.ENGLISH);
ResourceBundle Messages = ResourceBundle.getBundle("sizingtool.messages");
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
mnFile.setText(Messages.getString("IR_SizingTool.mnFile.text"));
mnLanguage.setText(Messages.getString("IR_SizingTool.mnLanguage.text"));
}
});
mntmEnglish.setHorizontalAlignment(SwingConstants.LEFT);
mntmEnglish.setIcon(new ImageIcon(IR_SizingTool.class.getResource("/images/en.PNG")));
mntmEnglish.setFont(new Font("Dialog", Font.PLAIN, 12));
mnLanguage.add(mntmEnglish);
JMenuItem mntmItalian = new JMenuItem(Messages.getString("IR_SizingTool.mntmItalian.text"));
mntmItalian.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Locale.setDefault(Locale.ITALY);
ResourceBundle Messages = ResourceBundle.getBundle("sizingtool.messages");
frmIrSizingTool.setTitle(Messages.getString("IR_SizingTool.frmIrSizingTool.title"));
mnFile.setText(Messages.getString("IR_SizingTool.mnFile.text"));
mnLanguage.setText(Messages.getString("IR_SizingTool.mnLanguage.text"));
}
});
mntmItalian.setHorizontalAlignment(SwingConstants.LEFT);
mntmItalian.setIcon(new ImageIcon(IR_SizingTool.class.getResource("/images/it.PNG")));
mntmItalian.setFont(new Font("Dialog", Font.PLAIN, 12));
mnLanguage.add(mntmItalian);
}
}
Dove devo piazzare il metodo cambiaLingua()?
Pensavo di piazzarlo all'interno della classe IR_SizingTool, giusto?
Però se lo metto li e scrivo mnFile.setText(... mi sottolinea mnFile e mi dice: mnFile cannot be resolved...
Cos'è che sbaglio? Sono nuovo di java e non mi è ancora chiarissimo come faccio ad accedere ai vari oggetti e come. Nella mia stupidità pensavo che, dopo aver creato un oggetto tipo JMenu, in qualsiasi punto del programma avrei potuto accedervi semplicemente così: mnNomeMenu.setText("blabla"), ad esempio. Invece ho capito che non posso, anche se non mi sono ancora chiare le regole di queste "limitazioni" (so che non sono limitazioni, ma utili regole di protezione dei linguaggi orientati ad oggetti, solo che sono nuovo e non ci capisco ancora molto). Forse il mio approccio è più procedurale che ad oggetti, per questo faccio un pò di fatica...