gpt4 book ai didi

java - JFrame 中的天气 API 显示

转载 作者:行者123 更新时间:2023-12-01 13:17:44 25 4
gpt4 key购买 nike

我正在尝试创建一个基于 java/swing 的应用程序来显示天气。到目前为止,我已经创建了背景和文本字段+按钮来获取位置,但我不知道如何连接它,以便它显示并将背景更改为另一个图像。如果这是一个菜鸟问题,我很抱歉,但我以前从未学过java(只是处理和arduino加上网页设计),而且我的大学强制我使用高级java,因为我知道我以前从未做过类似的事情。

这是迄今为止我的代码:

package AppPackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class ApplicationWidget extends JFrame implements ActionListener {

ImageIcon basic;
JLabel label1;
JFrame frame;
JLabel label;
JTextField textfield;
JButton button;




public static void main (String[]args){
ApplicationWidget gui = new ApplicationWidget();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setVisible(true);
gui.setSize(320, 480);






}

public ApplicationWidget() {

setLayout(new FlowLayout());
WeatherAPI weather = new WeatherAPI("44418");
System.out.println(WeatherAPI.theWeatherRSS);
for(int i = 0; i < WeatherAPI.weatherForecastList.size(); i++)
{
System.out.println(WeatherAPI.weatherForecastList.get(i).lowTemp + " " +
WeatherAPI.weatherForecastList.get(i).highTemp);
}

label = new JLabel("Welcome! Please Enter your location");
add(label);

textfield = new JTextField(15);
add(textfield);
for(int i = 0; i < WeatherAPI.weatherForecastList.size(); i++)
{
System.out.println(WeatherAPI.weatherForecastList.get(i).lowTemp + " " +
WeatherAPI.weatherForecastList.get(i).highTemp);
}


button = new JButton("Check weather");

add(button);



basic = new ImageIcon(getClass().getResource("basicback.jpg"));
label1 = new JLabel(basic);
add(label1);

/*add design here*/
/*add mouse interaction*/
/*add image capture*/
}

@Override
public void actionPerformed(ActionEvent e){

JButton button = (JButton) e.getSource();
if (e.getSource() == button){
String data = textfield.getText();
System.out.println(data);
}

}





}

WeatherAPI 代码:

    package AppPackage;
import java.net.*;
import java.util.regex.*;
import java.util.ArrayList;
import java.io.*;

public class WeatherAPI
{
static String theWeatherRSS;
static String theCity;
static ArrayList<Forecast> weatherForecastList;

//WeatherAPI(String string) {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
// }

public class Forecast
{
String lowTemp;
String highTemp;
}

/**
*
* @param city
*/
public WeatherAPI(String city)
{
theCity = city;
theWeatherRSS = getWeatherAsRSS(city);
parseWeather(theWeatherRSS);
}

void parseWeather(String weatherHTML)
{
weatherForecastList = new ArrayList<Forecast>();
int startIndex = 0;
while(startIndex != -1)
{
startIndex = weatherHTML.indexOf("<yweather:forecast", startIndex);
if(startIndex != -1)
{ // found a weather forecast
int endIndex = weatherHTML.indexOf(">", startIndex);
String weatherForecast = weatherHTML.substring(startIndex, endIndex+1);

// get temp forecast
String lowString = getValueForKey(weatherForecast, "low");
String highString = getValueForKey(weatherForecast, "high");

Forecast fore = new Forecast();
fore.lowTemp = lowString;
fore.highTemp = highString;
weatherForecastList.add(fore);

// move to end of this forecast
startIndex = endIndex;
}
}
}

String getValueForKey(String theString, String keyString)
{
int startIndex = theString.indexOf(keyString);
startIndex = theString.indexOf("\"", startIndex);
int endIndex = theString.indexOf("\"", startIndex+1);
String resultString = theString.substring(startIndex+1, endIndex);
return resultString;
}

String getWeatherAsRSS(String city)
{
try{
/*
Adapted from: http://stackoverflow.com/questions/1381617/simplest-way-to-correctly-load-html-from-web-page-into-a-string-in-java
Answer provided by: erickson
*/
URL url = new URL("http://weather.yahooapis.com/forecastrss?w="+city+"&u=c");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and
* hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
Reader r = new InputStreamReader(con.getInputStream(), charset);
StringBuilder buf = new StringBuilder();
while (true) {
int ch = r.read();
if (ch < 0)
break;
buf.append((char) ch);
}
String str = buf.toString();
return(str);
}
catch(Exception e) {System.err.println("Weather API Exception: "+e);}
return null;
}

}

感谢您的帮助,我真的很绝望,因为我混淆了提交日期,而且我已经没有多少时间了......

最佳答案

假设label1是您的背景标签,只需使用label1.setIcon(...)。您将传递给它的是一个 new ImageIcon

此外,您还没有将 ActionListener 注册到您的按钮。如果您没有向按钮注册监听器,它将不会执行任何操作。这样做

button = new JButton("Check weather");
button.addActionListener(this);
add(button);
<小时/>

您还没有指定新图像的来源,所以我真的无法为您提供更多帮助。

关于java - JFrame 中的天气 API 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com