il problema sta cominciando serio...
allora: chiamo il metodo update così
codice:
public void updateLanguage(JPanel panel, int lang) {
passando il frame principale che al suo interno contiene 3 altri panel a loro volta contenenti annidati i componenti jbutton, jlabel, jradiobutton.
quindi quando tento di scrivere nell'update
codice:
Component[] c = panel.getComponents();
for (int i = 0; i < c.length; i++) {
System.out.println((String) c[i].toString());
if (c[i] instanceof JLabel) {
((JButton)c[i]).setText( getLabel( (String) c[i].toString() ) );
} else if (c[i] instanceof JMenu) {
((JButton)c[i]).setText( getLabel( (String) c[i].toString() ) );
} else if (c[i] instanceof JButton) {
((JButton)c[i]).setText( getLabel( (String) c[i].toString() ) );
} else if (c[i] instanceof JRadioButton) {
((JButton)c[i]).setText( getLabel( (String) c[i].toString() ) );
}
}
giustamente non ottengo nulla in quanto trovo 3 pannelli soltanto. da notare che in questo modo perdo traccia della barra della barra dei menu... non contenuta nel panel passato (credo).
la getLabel è così fatta:
codice:
public String getLabel(String s) {
String translation = (String)h.get(s);
return translation;
}
PS - getLabel e updateLanguage per coerenza li ho messi tutti e due nella classe "Language" ma la chiamata a tali metodi non è un problema.
la getLabel ha quella forma che gradirei non venisse cambiata in quanto cmq mi fa le prime assegnazioni. La chiamo infatti nel seguente modo:
codice:
sendButton.setText(lang.getLabel("sendButton"));
NOTA - h, contenente l'intero dizionario, è una Hashtable che inizializzo (o svuoto e ripopolo) al settaggio/cambio di lingua con metodi testati e funzionanti.
praticamente se risolvessi il problema dell'update avrei finito... ma come riuscire a togliere il "SE" ?