Hallo,
Es geht um folgendes: ich möchte der GUI meines Programmes weitere Sprachen gönnen, die Dialoge und Labels usw. werden aus einer XML Datei ausgelesen und je nach Sprache, sollen diese gesetzt werden.
Mein Ansatz lautet:
Gehe über alle Objekte der GUI Klasse und falls du eine Objekt findest, welches so heißt wie ein EIntrag in der XML Datei, dann setze den Wert aus der XML Datei.
Also in der XML Datei steht vereinfacht drin:
id=jButton1
lang=de
value=Das ist das Caption meines Buttons in Deutsch
Wobei die id genau der Variablenname des betreffenden Buttons ist.
So nun bekomm ich hier eine "java.lang.NoSuchMethodException: javax.swing.JButton.setText(java.lang.String)"
Was mach ich falsch?
Irgendwie müsste ich das Objekt bekommen, das ich ändern möchte. Aber ich habe nur seinen Variablennamen als String vorliegen (bzw. als 'Field' Objekt). Wie kann ich nun direkt an das Objekt rankommen?
Es geht um folgendes: ich möchte der GUI meines Programmes weitere Sprachen gönnen, die Dialoge und Labels usw. werden aus einer XML Datei ausgelesen und je nach Sprache, sollen diese gesetzt werden.
Mein Ansatz lautet:
Gehe über alle Objekte der GUI Klasse und falls du eine Objekt findest, welches so heißt wie ein EIntrag in der XML Datei, dann setze den Wert aus der XML Datei.
Also in der XML Datei steht vereinfacht drin:
id=jButton1
lang=de
value=Das ist das Caption meines Buttons in Deutsch
Wobei die id genau der Variablenname des betreffenden Buttons ist.
Java:
public void changeLang() {
// c ist die Klasse in der die ganzen GUI Elemente (Buttons usw.) definiert sind.
Class c = HotkeyGUI.class;
try {
// er läuft über alle Elemente in der XML Datei (hab ich vorher schon geparst)
for (String key : MessageParser.map.keySet()) {
// über alle Felder der Klasse (also auch GUI Elemente)
for (Field field : c.getDeclaredFields()) {
// wenn die Variable mit dem passenden Namen gefunden worden ist
if (field.getName().equals(key)) {
// hole dir die Methode setText von dem JButton
Method method = field.getType().getMethod("setText", String.class);
//und setze den Wert (vorher aus der XML geparst)
method.invoke(field, MessageParser.map.get(key));
}
}
}
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
So nun bekomm ich hier eine "java.lang.NoSuchMethodException: javax.swing.JButton.setText(java.lang.String)"
Was mach ich falsch?
Irgendwie müsste ich das Objekt bekommen, das ich ändern möchte. Aber ich habe nur seinen Variablennamen als String vorliegen (bzw. als 'Field' Objekt). Wie kann ich nun direkt an das Objekt rankommen?
Zuletzt bearbeitet: