# aus XML-File gelesenes als Methodenaufruf verwenden



## willi (11. Mrz 2005)

hallo!

"java-forum.org
Die Java-Community, in der einem garantiert geholfen wird."

-> da bin ich jetzt aber mal gespannt 


nun zu meinem problem:

mein vorhaben ist es, ein panel dynamisch mit controls zu füllen. die beschreibung dazu leg ich in einer xml-datei ab (z.b. typ=jlabel, caption=bla...). es gibt nur eine begrenzte anzahl an controls, also noch nicht so wild.
sämtliche methoden (get/set) existieren schon (es geht hier um ejbs mit einer datenbank -> getter und setter werden automatisch erzeugt!)
der knackpunkt (für mich) liegt jetzt darin, dass  ich diese methoden nur noch z.b. beim speichern aufrufen müsste.
ich könnte in die xml zu meinem control die entpsrechende klasse mit der gewünschten methode schreiben. die sind vorher bekannt.

vielleicht hat ja jemand nen spontanen tip. oder nen komplett anderen ansatz...

auf jeden fall besten dank schon mal fürs durchlesen


----------



## Beni (11. Mrz 2005)

Reflection könnte was für dich sein:

So kann man z.B. die Hintergrundfarbe eines Panels ändern, ohne im Code je eine Panel-Variable zu benutzen:

```
Class panelClass = Class.forName( "javax.swing.JPanel");
Methode set = panelClass.getMethod( "setBackground", new Class[]{ Color.class });

Object instance = panelClass.instance();
set.invoke( instance, Color.RED );
```
(Du bemerkst sicher: hier wird mit Strings gearbeitet, und da eine XML-Datei eine Textdatei ist, die Strings enthält...)

Mehr darüber in der API, unter "java.lang.Class".


----------



## willi (12. Mrz 2005)

gigantisch! des ging ja echt flott!

gibt es aber ne alternative zu reflections? ich find die irgendwie so "von hinten durch die brust ins auge".

bestan dank nochmal!

willi


----------



## Bleiglanz (12. Mrz 2005)

so wie du das beschrieben hast gehts tatsächlich nur mit Reflection (weil die Namen der Methoden nur in der XML Datei stehen - theoretisch könnte man ja javac aufrufen -> das xml file ändern -> programm aufrufen)

Alternative: kleines tool (oder gleich xslt) um aus deiner xml-datei passenden source-code zu erzeugen und diesen dann per Strategy-Pattern in das Panel zu integrieren

Aber wie gesagt: wenn du willst, dass man das XML-File verändern kann nachdem der Compiler drübergelaufen ist (oder auch zur Laufzeit...); dann bleibt dir nur Reflection


----------



## willi (12. Mrz 2005)

"Alternative: kleines tool (oder gleich xslt) um aus deiner xml-datei passenden source-code zu erzeugen und diesen dann per Strategy-Pattern in das Panel zu integrieren"

klingt toll! leider versteh ich da nur bahnhof! hättest du lust auf ein kurzes code-beispiel?

besten dank im voraus!


----------



## Bleiglanz (12. Mrz 2005)

```
<xsl:for-each select="./panel">
public cass Panel<xsl:value-of select="@name"/>Handler{ 
// irgendein code, der sich aus den xmldaten erzeugen lässt...
}
</xsl:for-each>
```


----------

