尝试解析XML并将信息导入GUI
我正在尝试将我解析的XML数据放到我正在制作的GUI上。我们的目标是点击“打开连接”按钮(其中包含Open Connection类中的代码)以打开与XML网页的连接,然后使用“获取标题”按钮(其中包含代码NPRInfo类)来获取文章的标题和描述以显示在文本框中。现在忽略关键字按钮,一旦我解决了这个问题,我将开始研究。任何人都可以指出我做错了什么,我该如何解决它?感谢您的帮助!尝试解析XML并将信息导入GUI
//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
这样做,将文本区域的文本更改为您指定的文本区域,放弃之前应用于此的文本区域。
好吧,那贴出更多我想要的东西,但现在切断了。我需要制作一个滚动条吗?另一件事,是否只有在我点击“标题”按钮后才能让它显示出来?现在它显示正确,当我运行程序。 – BondyeLwa 2014-09-18 21:22:54
将文本区域添加到滚动窗格 – MadProgrammer 2014-09-18 21:25:24
有关更多详细信息,请参阅[如何使用滚动窗格](http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html) – MadProgrammer 2014-09-18 21:26:48
问题是什么? – MadProgrammer 2014-09-18 21:11:22
当我点击GUI上的按钮时,没有任何反应。它应该只显示标题和描述,它在system.out上工作得很好,但不在gui文本区域。唯一出现在文本区域的是----------------------------------- – BondyeLwa 2014-09-18 21:13:01