Swing Wie rufe ich Childelement von XML in Java auf?

Faiza

Mitglied
Hallo zusammen,

ich bin mir ziemlich sicher, dass ich eine alberne Frage stelle, aber ich komme an diese stelle überhaupt nicht weiter.

Durch meine XML Datei möchte ich den text in JButton ausgeben.

Bitte siehe Anhang: Mein Gui sieht wie ComponentModel.png aus aber soll es wir das Hauptfenster.png


Ich kann meine Childelemente nicht richtig aufrufen, leider weiss ich überhaupt nicht was ich falsch mache.

Es wäre sehr nett wenn jemand mir weiter hilfen kann...

Danke im voraus.


Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class getComponentPanel extends JFrame implements ActionListener {

	private JPanel componentPanel;
	Document dom;
	ArrayList MainButton;

	// constructor
	public getComponentPanel() throws Exception {
	
		// create a list to hold the MainButton objects
		MainButton = new ArrayList();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(new Dimension(250, 270));
		setTitle("OptimISE Component Model");
		pack();
		setVisible(true);
		getContentPane().setLayout(
				new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		getContentPane().add(getComponentPanel(), getLayout());
		componentPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
		componentPanel.setBorder(BorderFactory.createTitledBorder(null, "",
				TitledBorder.DEFAULT_JUSTIFICATION,
				TitledBorder.DEFAULT_POSITION,
				new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
	}

	private Component getComponentPanel() throws Exception {

		File file = new File("OptimISEGuiModel.xml");

		// get the Factory
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();

		// get the root elememt
		Document doc = db.parse(file);
		doc.getDocumentElement().normalize();
		System.out.println("Root element "
				+ doc.getDocumentElement().getNodeName());

		// ---- Loop through the list of main nodes ----
		NodeList nl = doc.getElementsByTagName("MainButton");

		// Loop for Element
		for (int s = 0; s < nl.getLength(); s++) {
			
			
			// Nodes
			Node fstNode = nl.item(s);
			if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
				Element fstElmnt = (Element) fstNode;
				
                    // Ich hätte gerne alle Childelements hier ausgegeben.
				
				NodeList fstNmElmntLst = fstElmnt
						.getElementsByTagName("ChartName");
				Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
//				
				NodeList nodes = fstNmElmnt.getChildNodes();
			 
						String NodeName = fstElmnt.getNodeName();
						System.out.println(NodeName);

						// Buttons
						for (int a = 0; a < nl.getLength(); a++) {
							JButton button = new JButton(NodeName);
							button.setPreferredSize(new Dimension(180, 30));
							button.setActionCommand(NodeName);
							componentPanel.add(button);
							button.addActionListener(this);
						}
					}
				}
		return componentPanel;
			}


	public void actionPerformed(ActionEvent e) {

	}

}



Java:
public class XMLReader {
	
	public static void main(String argv[]) throws Exception {
		
		new getComponentPanel();
		
	}
}


[XML]<?xml version="1.0" encoding="UTF-8"?>

<OptimISEGuiModel>
<MainButton>
<ChartName>LOC</ChartName>
</MainButton>

<MainButton>
<ChartName>Sir Statistics</ChartName>
</MainButton>

<MainButton>
<ChartName>Test Statistics</ChartName>
</MainButton>

<MainButton>
<ChartName>Issue</ChartName>
</MainButton>

<MainButton>
<ChartName>Rappidd</ChartName>
</MainButton>


</OptimISEGuiModel>
[/XML]
 
Java:
                Node tag = tagliste2.item(i);
                String inhalt = tag.getFirstChild().getNodeValue();
                System.out.println(tag.getNodeName()+":"+inhalt);

oh sorry nicht ganz gelesen^^ also bringts nix was ich gepostet habe 😳
 
Hier kurz zusammengehakt, bestimmte Stellen würde ich da an deiner Stelle noch in eigene Klassen/Methoden auslagern. (Z.B. das parsen der XML würde ich außerhalb der GUI machen und der GUI dann eine Liste der Namen übergeben.)

Java:
package swing_xml;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

@SuppressWarnings("serial")
public class MyFrame extends JFrame {

    public MyFrame() throws Exception {
        super("OptimISE Component Model");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
        setSize(new Dimension(250, 270));

        add(createComponentPanel(), getLayout());

        pack();
        setVisible(true);
    }

    private Component createComponentPanel() throws Exception {
        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
        p.setBorder(BorderFactory.createTitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,
                TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(51, 51,
                        51)));

        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = db.parse(getClass().getResourceAsStream("myxml.xml"));
        System.out.println("Root " + doc.getDocumentElement().getNodeName());

        NodeList mainButtons = doc.getElementsByTagName("MainButton");
        for (int i = 0; i < mainButtons.getLength(); i++) {
            Element mainButton = (Element) mainButtons.item(i);
            Element chartName = (Element) mainButton.getElementsByTagName("ChartName").item(0);
            String name = chartName.getTextContent();

            System.out.println("ChartName = " + name);

            JButton btn = new JButton(name);
            btn.setPreferredSize(new Dimension(180, 30));
            btn.setActionCommand(name);
            p.add(btn);
        }

        return p;
    }

    public static void main(String[] args) throws Exception {
        new MyFrame();
    }
}
 

Zurück
Oben