图形用户界面:通过ip获取地址并显示天气情况
来源:互联网 发布:lol刷点卷软件 编辑:程序博客网 时间:2024/04/30 08:59
1.贴图展示
2.代码
Window.java
package com.xiang;import java.applet.AudioClip;import java.net.URL;import javax.swing.JApplet;public class Window {private Home home;private boolean isPlayMusic = false;private AudioClip audio;public Window() {final Window main = this;new Thread(new Runnable(){ public void run() { home = new Home(main); home.setVisible(true); } }).start();URL audioPath = this.getClass().getResource("/music/baby.wav");//获取的是URL文本路径 调用 .getPath()获取类的绝对路径 audio = JApplet.newAudioClip(audioPath); audio.loop(); isPlayMusic = true;}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew Window();}public AudioClip getAudio() { return audio; } public void setAudio(AudioClip audio) { this.audio = audio; } public Home getHome() { return home; } public void setHome(Home home) { this.home = home; } public boolean isIsPlayMusic() { return isPlayMusic; } public void setIsPlayMusic(boolean isPlayMusic) { this.isPlayMusic = isPlayMusic; }}
Home.java
package com.xiang;import java.awt.Dimension;import java.awt.Label;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import com.sun.awt.AWTUtilities;public class Home extends JFrame implements ActionListener,MouseMotionListener, MouseListener {private JPanel panel;private JButton musicButton;private JButton closeButton;private JComboBox select;private JLabel weatherJLabel;//private JLabel weather[] = new JLabel[5];private Window main;private int rx;private int ry;public Home(Window main) {this.main = main;Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setSize(650, 600);panel = new MyPanel("/photo/bg1.gif");panel.setSize(650, 600);panel.setLayout(null);musicButton = new MyButton("/photo/music.gif");musicButton.setBounds(240, 150, 60, 30);musicButton.addActionListener(this);/*String []strings ={"今天", "明天", "后天"};select = new JComboBox(strings);select.setBounds(310, 150, 60, 30);*///System.out.println(select.getSelectedItem());//select.addActionListener(this);closeButton = new MyButton("/photo/close.gif");closeButton.setBounds(490, 150, 30, 30);closeButton.addActionListener(this);/*String weatherString = GetPlaceByIp.getweather();String[] weatherarray = new String[5];weatherarray = weatherString.split(",");for (int i = 0; i < weatherarray.length; i++) {weather[i] = new JLabel(weatherarray[i]);//System.out.println(weatherarray[i]);weather[i].setBounds(240, 300 + i * 15, 240, 30);}*/weatherJLabel = new MyLabel();weatherJLabel.setSize(340, 240);weatherJLabel.setBounds(230, 190, 340, 240);panel.add(musicButton);//panel.add(select);/*for (int i = 0; i < weatherarray.length; i++)panel.add(weather[i]);*/panel.add(closeButton);panel.add(weatherJLabel);this.addMouseListener(this);this.addMouseMotionListener(this);this.setContentPane(panel);this.setLocation(((int) screenSize.getWidth() - 600) / 2,((int) screenSize.getHeight() - 600) / 2);this.setUndecorated(true);AWTUtilities.setWindowOpaque(this, false);this.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == musicButton) {if (main.isIsPlayMusic()) {main.getAudio().stop();main.setIsPlayMusic(false);} else {main.getAudio().loop();main.setIsPlayMusic(true);}}else if(e.getSource() == closeButton){//this.setVisible(false);System.exit(0);}}@Overridepublic void mouseDragged(MouseEvent e) {// TODO Auto-generated method stubthis.setLocation(e.getXOnScreen() - rx, e.getYOnScreen() - ry);}@Overridepublic void mouseMoved(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubrx = e.getX();ry = e.getY();}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}}
GetPlaceByIp.java
package com.xiang;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.Map;public class GetPlaceByIp {public static String getAddressByIP() {String province = null;String city = null;try {String strIP = getWebIp();URL url = new URL("http://ip.qq.com/cgi-bin/searchip?searchip1="+ strIP);URLConnection conn = url.openConnection();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK"));String line = null;StringBuffer result = new StringBuffer();while ((line = reader.readLine()) != null) {result.append(line);}reader.close();strIP = result.substring(result.indexOf("该IP所在地为:"));strIP = strIP.substring(strIP.indexOf(":") + 1);province = strIP.substring(6, strIP.indexOf("省"));city = strIP.substring(strIP.indexOf("省") + 1, strIP.indexOf("市"));//System.out.print(city);} catch (IOException e) {return "读取失败";}return city;}/*public static void main(String[] args) throws Exception {String city = getAddressByIP();String cityString = null;try {cityString = URLEncoder.encode(city, "GBK");} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String link = "http://php.weather.sina.com.cn/xml.php?city="+cityString+"&password=DJOYnieT8234jlsK&day=0";URL url;try {url = new URL(link);Weather parser = new Weather(url);String[] nodes = { "city", "status1", "temperature1", "status2","temperature2" };Map<String, String> map = parser.getValue(nodes);System.out.println(map.get(nodes[0]) + " 今天白天:" + map.get(nodes[1])+ " 最高温度:" + map.get(nodes[2]) + "℃ 今天夜间:"+ map.get(nodes[3]) + " 最低温度:" + map.get(nodes[4]) + "℃ ");} catch (MalformedURLException e) {e.printStackTrace();}}*/public static String getWebIp() throws IOException {InputStream ins = null; try { URL url = new URL("http://1111.ip138.com/ic.asp"); URLConnection con = url.openConnection(); ins = con.getInputStream(); InputStreamReader isReader = new InputStreamReader(ins, "GB2312"); BufferedReader bReader = new BufferedReader(isReader); StringBuffer webContent = new StringBuffer(); String str = null; while ((str = bReader.readLine()) != null) { webContent.append(str); //System.out.println(str); } int start = webContent.indexOf("[") + 1; int end = webContent.indexOf("]"); return webContent.substring(start, end); } finally { if (ins != null) { ins.close(); } } }public static String getweather(){String city = getAddressByIP();String cityString = null;try {cityString = URLEncoder.encode(city, "GBK");} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String link = "http://php.weather.sina.com.cn/xml.php?city="+cityString+"&password=DJOYnieT8234jlsK&day=0";URL url;try {url = new URL(link);Weather parser = new Weather(url);String[] nodes = { "city", "status1", "temperature1", "direction1","power1", "status2", "temperature2", "direction2", "power2", "chy_shuoming", "gm_s", "yd_s", };Map<String, String> map = parser.getValue(nodes);/*System.out.println(map.get(nodes[0]) + " 今天白天:" + map.get(nodes[1])+ " 最高温度:" + map.get(nodes[2]) + "℃ 今天夜间:"+ map.get(nodes[3]) + " 最低温度:" + map.get(nodes[4]) + "℃ ");*/return map.get(nodes[0]) + ",今天白天:" + map.get(nodes[1])+ ",温度:" + map.get(nodes[2]) + "℃,风向:" + map.get(nodes[3])+ ",风级:" + map.get(nodes[4]) + ",今天夜间:" + map.get(nodes[5])+ ",温度:" + map.get(nodes[6]) + "℃,风向:" + map.get(nodes[7])+ ",风级:" + map.get(nodes[8]) + ",穿衣说明:," + map.get(nodes[9]) + ",感冒说明:," + map.get(nodes[10])+ ",运动说明:," + map.get(nodes[11]);} catch (MalformedURLException e) {e.printStackTrace();}return "";}}
Weather.java
package com.xiang;/** * java获取新浪天气预报代码 */import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.FileInputStream;import java.io.UnsupportedEncodingException;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;/** * 解析xml文档,包括本地文档和url * */public class Weather {InputStream inStream;Element root;public InputStream getInStream() {return inStream;}public void setInStream(InputStream inStream) {this.inStream = inStream;}public Element getRoot() {return root;}public void setRoot(Element root) {this.root = root;}public Weather() {}/** * 通过输入流来获取新浪接口信息 * * @param inStream */public Weather(InputStream inStream) {if (inStream != null) {this.inStream = inStream;DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();try {DocumentBuilder domBuilder = domfac.newDocumentBuilder();Document doc = domBuilder.parse(inStream);root = doc.getDocumentElement();} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}public Weather(String path) {InputStream inStream = null;try {inStream = new FileInputStream(path);} catch (FileNotFoundException e1) {e1.printStackTrace();}if (inStream != null) {this.inStream = inStream;DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();try {DocumentBuilder domBuilder = domfac.newDocumentBuilder();Document doc = domBuilder.parse(inStream);root = doc.getDocumentElement();} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}public Weather(URL url) {InputStream inStream = null;try {inStream = url.openStream();} catch (IOException e1) {e1.printStackTrace();}if (inStream != null) {this.inStream = inStream;DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();try {DocumentBuilder domBuilder = domfac.newDocumentBuilder();Document doc = domBuilder.parse(inStream);root = doc.getDocumentElement();} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}/** * * @param nodes * @return 单个节点多个值以分号分隔 */public Map<String, String> getValue(String[] nodes) {if (inStream == null || root == null) {return null;}Map<String, String> map = new HashMap<String, String>();// 初始化每个节点的值为nullfor (int i = 0; i < nodes.length; i++) {map.put(nodes[i], null);}// 遍历第一节点NodeList topNodes = root.getChildNodes();if (topNodes != null) {for (int i = 0; i < topNodes.getLength(); i++) {Node book = topNodes.item(i);if (book.getNodeType() == Node.ELEMENT_NODE) {for (int j = 0; j < nodes.length; j++) {for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling()) {if (node.getNodeType() == Node.ELEMENT_NODE) {if (node.getNodeName().equals(nodes[j])) {String val = node.getTextContent();String temp = map.get(nodes[j]);if (temp != null && !temp.equals("")) {temp = temp + ";" + val;} else {temp = val;}map.put(nodes[j], temp);}}}}}}}return map;}/*public static void main(String[] args) {String cityString = null;try {cityString = URLEncoder.encode("青岛", "GBK");} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String link = "http://php.weather.sina.com.cn/xml.php?city="+cityString+"&password=DJOYnieT8234jlsK&day=0";URL url;try {url = new URL(link);Weather parser = new Weather(url);String[] nodes = { "city", "status1", "temperature1", "status2","temperature2" };Map<String, String> map = parser.getValue(nodes);System.out.println(map.get(nodes[0]) + " 今天白天:" + map.get(nodes[1])+ " 最高温度:" + map.get(nodes[2]) + "℃ 今天夜间:"+ map.get(nodes[3]) + " 最低温度:" + map.get(nodes[4]) + "℃ ");} catch (MalformedURLException e) {e.printStackTrace();}}*/}
MyPanel.java
package com.xiang;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import javax.swing.JPanel;public class MyPanel extends JPanel {private Image backImg;public MyPanel(String imgPath){ backImg = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(imgPath));//Toolkit.getDefaultToolkit().getImage(...) 方法可接受 String 或者是 URL 参数,用以指定图像文件的路径。 this.updateUI(); } @Override public void paintComponent(Graphics g) {//插入背景图片 super.paintComponent(g); if(backImg!=null) g.drawImage(backImg, 0, 0,this.getWidth(),this.getHeight(), null); }}
MyButton.java
package com.xiang;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import javax.swing.JButton;public class MyButton extends JButton {private Image backImg;public MyButton(String imgPath){ backImg = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(imgPath)); }public void paintComponent(Graphics g) {//插入按钮背景 super.paintComponent(g); if(backImg!=null) g.drawImage(backImg, 0, 0,this.getWidth(),this.getHeight(), null); }}
MyLabel.java
package com.xiang;import java.awt.Color;import java.awt.Graphics;import java.util.ArrayList;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JLabel;public class MyLabel extends JLabel {private java.util.List<Message> msgs = new ArrayList<Message>();private String weatherString;private String[] weatherarray = new String[15];private int count;public MyLabel() {count = 0;weatherString = GetPlaceByIp.getweather().trim();weatherarray = weatherString.split(",");new Thread(new Runnable() {@Overridepublic void run() {while (true) {// 显示信息内容repaint();try {Thread.sleep(1000);} catch (InterruptedException ex) {Logger.getLogger(MyLabel.class.getName()).log(Level.SEVERE, null, ex);}}}}).start();}public void paint(Graphics g) {createMsg();g.setColor(Color.red);for (Message msg : msgs) {g.drawString(msg.getMsg(), msg.getX(), msg.getY());}}private void createMsg() {// TODO Auto-generated method stubif (count >= weatherarray.length)count = 0;for (Message msg : msgs) {msg.setY(msg.getY() - 15);}if (msgs.size() > 0 && msgs.get(0).getY() < 0)msgs.remove(0);Message m = new Message((int) (120 - weatherarray[count].length() * 6),230, weatherarray[count]);// System.out.println(weatherarray[count]);msgs.add(m);count++;}}
Message.java
package com.xiang;public class Message {private int x; private int y; private String msg; public Message() { } public Message(int x, int y, String msg) { this.x = x; this.y = y; this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; }}
3.目录结构
4.参考地址
点击打开链接
1 0
- 图形用户界面:通过ip获取地址并显示天气情况
- 通过获取用户ip地址定位到用户的城市并显示
- 网页上显示天气、IP情况
- php 通过 SoapClient 获取天气情况
- JS获取客户端IP地址并显示地址方法汇总
- 通过IP获取地址
- Soap请求获取指定城市的天气情况并在天地图API Map中显示
- [Android] AlertDialog获取网上天气并显示各城市天气
- 通过域名获取IP地址
- 通过socket获取ip地址
- 通过IP获取MAC地址
- 通过域名获取ip地址
- 通过IP地址获取MAC
- 通过域名获取ip地址
- 通过ip获取mac地址
- 通过域名获取IP地址
- android 根据IP获取天气情况 详细讲解
- android 根据IP获取天气情况 详细讲解
- face++的颜值计算算法实现
- Javascript的setTimeOut和setInterval用法
- python下载图片
- 使用指向函数的指针
- pop 跳转
- 图形用户界面:通过ip获取地址并显示天气情况
- vs2012 error c4996: 'fopen': This function or variable may be unsafe
- python 执行 dos 命令
- 【iOS翻译】 Cocoa编码规范
- 获得键盘高度
- JQuery Slider 实现时间刻度滑动条,用以编辑项目/起始时间(手动输入可自动更新到滑动条)
- 史上最详细的Android Studio系列教程三--快捷键
- Navigationbar
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容