您现在的位置: > 首页 > 程序开发 > Java教程
>> 最新教程
>> 热门教程
>> 最新游戏资讯
>> 热门游戏资讯
Java获取Google天气预报实例代码
作者:                来自:安迪教程网                 加入时间:10-09-17                进入论坛讨论
  1. /**
  2.  * 一个利用Java获取Google天气预报的例子
  3.  */
  4. import java.awt.BorderLayout;
  5. import java.awt.Color;
  6. import java.awt.GridLayout;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;
  11. import java.io.*;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14. import org.w3c.dom.*;
  15. import javax.swing.BorderFactory;
  16. import javax.swing.JButton;
  17. import javax.swing.JFrame;
  18. import javax.swing.JPanel;
  19. import javax.swing.JScrollPane;
  20. import javax.swing.JTextArea;
  21. import javax.swing.JTextField;
  22. import javax.xml.parsers.*;
  23. public class GoogleReport extends JFrame implements ActionListener {
  24.     JPanel p1 = new JPanel();
  25.     JTextField tf = new JTextField(2);
  26.     JButton but = new JButton("查询");
  27.     JPanel p2 = new JPanel();
  28.     JTextArea ta = new JTextArea(10, 40);
  29.     public GoogleReport() {
  30.         super("天气预报查询");
  31.         // 设置p1面板
  32.         p1.setLayout(new BorderLayout());
  33.         tf.addKeyListener(new TfListener());// 设置tf监听器
  34.         tf.setBorder(BorderFactory.createLineBorder(Color.blue, 1));
  35.        
  36.         p1.add(tf, BorderLayout.CENTER);
  37.         but.setBorder(BorderFactory.createLineBorder(Color.green));// 设置按钮边框颜色
  38.         // 增加but事件监听器
  39.         but.addActionListener(this);
  40.         p1.add(but, BorderLayout.EAST);
  41.         add(p1, BorderLayout.NORTH);
  42.         // 设置p2面板
  43.         p2.setLayout(new GridLayout(1, 1));
  44.         JScrollPane sp = new JScrollPane(ta);
  45.         ta.setEnabled(false);
  46.         ta.setBorder(BorderFactory.createLineBorder(Color.red, 2));
  47.         p2.add(sp);
  48.         add(p2, BorderLayout.CENTER);
  49.         this.setSize(500, 400);
  50.         this.setLocationRelativeTo(null);
  51.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  52.         this.setVisible(true);
  53.     }
  54.     public static void main(String[] args) {
  55.         new GoogleReport();
  56.     }
  57.     /**
  58.      * getWeather->由city值获得天气情况
  59.      *
  60.      * @param city
  61.      * @return 获得的天气情况的字符串
  62.      */
  63.     public String getWeather(String city) {
  64.         try {
  65.             URL ur = new URL("http://www.google.com/ig/api?hl=zh_cn&weather="
  66.                     city);
  67.             InputStream instr = ur.openStream();
  68.             String s;
  69.             String str;
  70.             BufferedReader in = new BufferedReader(new InputStreamReader(instr));
  71.             StringBuffer sb = new StringBuffer();
  72.             Writer out = new BufferedWriter(new OutputStreamWriter(
  73.                     new FileOutputStream("weather.txt"), "utf-8"));
  74.             while ((s = in.readLine()) != null) {
  75.                 sb.append(s);
  76.             }
  77.             str = new String(sb);
  78.             out.write(str);
  79.             out.close();
  80.             in.close();
  81.         } catch (MalformedURLException e) {
  82.             e.printStackTrace();
  83.         } catch (IOException e) {
  84.             e.printStackTrace();
  85.         }
  86.         File f = new File("weather.txt");
  87.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  88.         String str = null;
  89.         try {
  90.             DocumentBuilder builder = factory.newDocumentBuilder();
  91.             Document doc = builder.parse(f);
  92.             NodeList nl = (NodeList) doc
  93.                     .getElementsByTagName("forecast_conditions");// 获得XML文档的forecast_conditions元素
  94.             NodeList n2 = nl.item(0).getChildNodes();// 获得第一个forecast_condition的全部子节点
  95.             str = "今天是"
  96.                     n2.item(0).getAttributes().item(0).getNodeValue()
  97.                     ","
  98.                     n2.item(4).getAttributes().item(0).getNodeValue()
  99.                     ","// 获得n2的第五个元素current_conditions
  100.                     "最低气温"
  101.                     n2.item(1).getAttributes().item(0).getNodeValue()
  102.                     "℃,"// 获得n2的第二个元素low
  103.                     "最高气温"
  104.                     n2.item(2).getAttributes().item(0).getNodeValue() "℃";// 获得n2的第二个元素hight
  105.         } catch (Exception e) {
  106.         }
  107.         return str;
  108.     }
  109.     private class TfListener extends KeyAdapter {
  110.         public void keyPressed(KeyEvent e) {
  111.             if (e.getKeyCode() == KeyEvent.VK_ENTER) {
  112.                 String s = tf.getText();
  113.                 tf.setText("");
  114.                 String ss = getWeather(s);
  115.                 // ta.setBorder(BorderFactory.createLineBorder(Color.RED,1));
  116.                 ta.append(ss " ");
  117.             }
  118.         }
  119.     }
  120.     @Override
  121.     public void actionPerformed(ActionEvent e) {
  122.         if (e.getSource() == but) {
  123.             String s = tf.getText();
  124.             tf.setText("");
  125.             String ss = getWeather(s);
  126.             ta.append(ss " ");
  127.         }
  128.     }
  129. }
联系方式:QQ:6084884 email:agwcn@126.com 粤ICP备10101711号
本网站中发布的文章只代表发表人的个人观点,不代表安迪教程网网站的立场
copyright© 2000-2004 安迪教程网 All rights reserved agwcn.com