2014-09-18 53 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