我正在尝试将解析后的 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/