package work;
import java.a wt.Border Layout;
import java.a wt.Grid Layout;
import java.a wt.event.Action Event;
import java.a wt .event .Action Listener;
import java x.swing.Border Factory;
import java x.swing.J Button;
import java x.swing.J Frame;
import java x.swing.J Label;
import java x.swing.J Panel;
import java x.swing.J Text Area;
import java x.swing.J Text Field;
import java.i o.Buffered Reader;
import java.i o.Input Stream Reader;
import java.net.URL;
import java.net.URL Connection;
public class Weather {
public static void main(String[] args) {
Weather weather = new Weather();
}
public Weather() {
//打开一个窗口并设置title
JFrame frame = new JFrame("天气查询");
//定义 搜索,显示结果 区域
JPanel Plane = new JPanel();
JPanel TextPlane = new JPanel(new GridLayout(7,1));
Plane.setBorder(BorderFactory.createEmptyBorder(20,20,10,20));
TextPlane.setBorder(BorderFactory.createEmptyBorder(10,20,20,20));
// 搜索按钮 关闭按钮 等控件
JButton searchBtn = new JButton("搜索");
JButton resetBtn = new JButton("重置");
JButton closeBtn = new JButton("关闭");
JLabel label= new JLabel("请输入城市名: ");
//展示当天和未来5天的天气
JLabel realtime = new JLabel("");
JLabel n1 = new JLabel("");
JLabel n2= new JLabel("");
JLabel n3= new JLabel("");
JLabel n4= new JLabel("");
JLabel n5= new JLabel("");
JLabel n6= new JLabel("");
//输入框
JTextField input = new JTextField(10);
//显示结果文本区域
JTextArea textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setSize(600, 300);
// 发生请求查询输入城市的天气
searchBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String city = input.getText();
System.out.println("城市: " + city);
String url = "http://localhost:3002/queryWeather?city=" + city;
//保存数据
String result = "";
BufferedReader in = null;
try {
searchBtn.setText("请求中");
URL realUrl = new URL(url);
// 打开连接
URLConnection connection = realUrl.openConnection();
// 建立连接
connection.connect();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e1) {
System.out.println("发送GET请求出现异常!" + e1);
e1.printStackTrace();
} finally {
searchBtn.setText("搜索");
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
System.out.println("result:" + result);
//处理数据 展示到plane
if (result.length() != 0) {
StringBuffer sb = new StringBuffer(result);
//将json两边的 " 去掉
sb.deleteCharAt(sb.length()-1);
sb.deleteCharAt(0);
String[] strArr = sb.toString().split("\\|");
//如果是正确的结果则设置对应label的text
System.out.println(strArr.length);
if(strArr.length == 7) {//约定好可以被分成7份
realtime.setText(strArr[0]);
n1.setText(strArr[1]);
n2.setText(strArr[2]);
n3.setText(strArr[3]);
n4.setText(strArr[4]);
n5.setText(strArr[5]);
n6.setText(strArr[6]);
}else realtime.setText(strArr[0]);
}
}
});
// 重置input
resetBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input.setText("");
realtime.setText("");
n1.setText("");
n2.setText("");
n3.setText("");
n4.setText("");
n5.setText("");
n6.setText("");
}
});
// 关闭窗口
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 添加控件
Plane.add(label);
Plane.add(input);
Plane.add(searchBtn);
Plane.add(resetBtn);
Plane.add(closeBtn);
TextPlane.add(realtime);
TextPlane.add(n1);
TextPlane.add(n2);
TextPlane.add(n3);
TextPlane.add(n4);
TextPlane.add(n5);
TextPlane.add(n6);
// 将区域添加到frame
frame.add(Plane, BorderLayout.NORTH);
frame.add(TextPlane, BorderLayout.CENTER);
// 设置frame 大小 位置 是否显示 属性
frame.setSize(600, 500);
frame.setLocation(200, 200);
frame.setVisible(true);
}
}