java - 尝试解析 XML 并将信息显示到 GUI 上

标签 java xml swing user-interface

我正在尝试将解析后的 XML 数据传输到我正在制作的 GUI 上。目标是单击“打开连接”按钮(其中包含来自“打开连接”类的代码)以打开与 XML 网页的连接,然后使用“获取标题”按钮(其中包含来自“打开连接”类的代码) NPRInfo 类)来获取要显示在文本框中的文章的标题和描述。现在忽略“关键字”按钮,一旦解决了这个问题,我就会开始处理这个问题。有人可以指出我做错了什么以及我该如何解决它吗?感谢您的帮助!

//import java.io.*;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;


public class NPRNews extends JFrame implements ActionListener {
    JButton btnURL;
    JButton btnKW;
    JButton btnTD;
    JTextArea txtArea;
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) throws Exception {
        new NPRNews();
    }
    public NPRNews() throws Exception {
        super("NPR News");
        setupGUI();
        NPRInfo();
        registerListeners();
    }

    public void NPRInfo() throws Exception {
        try {
            DocumentBuilderFactory XmlBuilder = DocumentBuilderFactory.newInstance();
            DocumentBuilder xBuilder = XmlBuilder.newDocumentBuilder();
            Document xml = xBuilder.parse(new URL("http://www.npr.org/rss/rss.php?id=1001").openStream());
            if(xml==null)
                System.out.println("no XML DOM Document retrieved.");
                xml.getDocumentElement().normalize();

                NodeList nList = xml.getElementsByTagName("item");
            if(nList==null)
                System.out.println("No elements with tag name channel retrieved.");

            int temp = 0;
            for (temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE){
                    Element eElement = (Element) nNode;
                    txtArea.setText("Title : " + eElement.getElementsByTagName("title").item(0).getChildNodes().item(0).getNodeValue());
                    txtArea.setText("Description : "+ eElement.getElementsByTagName("description").item(0).getChildNodes().item(0).getNodeValue());
                    txtArea.setText("------------------------------------------------");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void setupGUI() {
        JPanel pnlCanvas = new JPanel();
        btnURL = new JButton("Connect to NPR");
        pnlCanvas.add(btnURL);
        btnKW = new JButton("NPR Keywords");
        pnlCanvas.add(btnKW);
        btnTD = new JButton("NPR Headlines");
        pnlCanvas.add(btnTD);
        txtArea = new JTextArea();
        pnlCanvas.add(txtArea);
        pnlCanvas.setLayout(new FlowLayout());

        Container mainPanel = this.getContentPane();
        mainPanel.add(pnlCanvas, BorderLayout.SOUTH);
        mainPanel.add(txtArea, BorderLayout.CENTER);


        this.setSize(500, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void registerListeners(){
        btnURL.addActionListener(this);
        btnKW.addActionListener(this);
        btnTD.addActionListener(this);
    }
    public void openConnection() throws Exception{
        URL url = new URL("http://www.npr.org/rss/rss.php?id=1001");
        URLConnection connection = url.openConnection();
        connection.connect();
    }


    public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand());
        if (e.getSource() == btnURL) {
            try {
                this.openConnection();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        if (e.getSource() == btnTD) {
            try {
                this.NPRInfo();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
}

最佳答案

不要使用JTextArea#setText,而是使用JTextArea#append

setText 就是这样做的,将文本区域的文本更改为您指定的内容,并丢弃之前应用于其中的内容。

关于java - 尝试解析 XML 并将信息显示到 GUI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922336/

相关文章:

java - 发生整数溢出时无符号整数和有符号整数的行为差异

android - 使用Scrolling View做xml布局,如何做出时尚的xml布局设计?

java - JAVA中不使用XMLParser部分解析XML文件

java - 通过按钮更改选项卡,数组索引越界?

java - 如何将 libusb 添加到 java swing netbeans 项目中?

macos - 从 macOS 上的打开命令启动的应用程序进程获取 pid

java - 我所有的布局 xml 文件都变成了自动生成的文件

java - Android base 64 编码字符串不显示实际图像

php - 如何使用 DOMDocument 替换节点的文本

java - 通过 JTextField 快速搜索 JTable 中的批量数据