Ik moet voor een project een xml doc inlezen en hiervan een gui generen. Dit gedeelte heb ik al voor mekaar gekregen. Het probleem is dat in de xml file ook acties gedefinieerd kunnen zijn die dynamisch ingeladen moeten worden en uitgevoerd. Bv tekst van de ene tekstbox naar de andere copieren.
Ik heb vernomen dat die via reflection zou moeten gebeuren? Maar dit is nog niet mijn belangrijkste probleem voorlopig.
Hoe kan ik een object refereren in java zonder dat daarvan een unieke naam ofzo van gekend is?
Om het probleem wat beter te verstaan. Met volgende code genereer ik de widgets van de gui.
Nu zie je dat elke widget via jcomponent c aangemaakt worden. Maar als ik nu later een eerder gecreeerde textfield wil aanpassen. Hoe kan ik deze dan bereiken? Hij heeft geen naam en het object waarvoor hij gebruikt is is al weer gevuld met een andere widget.
Als ik dit al in orde krijg kan ik beginnen met het reflextion probleem
Ik heb vernomen dat die via reflection zou moeten gebeuren? Maar dit is nog niet mijn belangrijkste probleem voorlopig.
Hoe kan ik een object refereren in java zonder dat daarvan een unieke naam ofzo van gekend is?
Om het probleem wat beter te verstaan. Met volgende code genereer ik de widgets van de gui.
Nu zie je dat elke widget via jcomponent c aangemaakt worden. Maar als ik nu later een eerder gecreeerde textfield wil aanpassen. Hoe kan ik deze dan bereiken? Hij heeft geen naam en het object waarvoor hij gebruikt is is al weer gevuld met een andere widget.
Als ik dit al in orde krijg kan ik beginnen met het reflextion probleem
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| private boolean processWidgetElement(Element e, JComponent container) { GridBagConstraints gbc = new GridBagConstraints(); try { gbc.gridx = Integer.parseInt(e.getAttribute("x")) - 1; gbc.gridy = Integer.parseInt(e.getAttribute("y")) - 1; } catch (NumberFormatException nfe) { } NodeList nl = e.getChildNodes(); try { int i = 0; // avoid the comment Nodes while (nl.item(i).getNodeType() != Node.ELEMENT_NODE) i++; Element wchild = (Element) nl.item(i); String label = getLabel(wchild); JComponent c; if (wchild.getTagName().equals("button")) { c = new JButton(label); c.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseReleased(java.awt.event.MouseEvent e) { System.out.println("knop ingedrukt"); } }); } else if (wchild.getTagName().equals("textfield")) c = new JTextField(label); else if (wchild.getTagName().equals("label")) c = new JLabel(label); else return false; container.add(c, gbc); } catch (NullPointerException npe) { return false; } return true; } |
[ Voor 4% gewijzigd door curry684 op 02-11-2005 13:42 . Reden: we hebben hier mooie [code] tags die zelfs highlighten.... ]