2014-09-18 61 views
0

我正在尝试将我解析的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(); 
      } 
     } 
    } 
} 
+0

问题是什么? – MadProgrammer 2014-09-18 21:11:22

+0

当我点击GUI上的按钮时,没有任何反应。它应该只显示标题和描述,它在system.out上工作得很好,但不在gui文本区域。唯一出现在文本区域的是----------------------------------- – BondyeLwa 2014-09-18 21:13:01

回答

1

不要使用JTextArea#setText,使用JTextArea#append来代替。

setText这样做,将文本区域的文本更改为您指定的文本区域,放弃之前应用于此的文本区域。

+0

好吧,那贴出更多我想要的东西,但现在切断了。我需要制作一个滚动条吗?另一件事,是否只有在我点击“标题”按钮后才能让它显示出来?现在它显示正确,当我运行程序。 – BondyeLwa 2014-09-18 21:22:54

+0

将文本区域添加到滚动窗格 – MadProgrammer 2014-09-18 21:25:24

+0

有关更多详细信息,请参阅[如何使用滚动窗格](http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html) – MadProgrammer 2014-09-18 21:26:48