我正在尝试创建一个基于java/swing的应用程序来显示天气。到目前为止,我已经创建了背景和textfield+按钮,以获得位置,但我不知道如何连接它,所以它显示和改变了另一个图像的背景。我很抱歉,如果这是一个noob的问题,但我从来没有做过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;
}
}
谢谢你的帮助,我真的很绝望,因为我混淆了提交日期,我已经没有多少时间了。。。。
1条答案
按热度按时间nxagd54h1#
假设
label1
是你的背景标签,就用吧label1.setIcon(...)
. 你将传递给它的是new ImageIcon
你还没有注册ActionListener
按你的按钮。如果你不注册一个监听器到这个按钮,它就什么也做不了。做这个你还没有指定新图像的来源,所以我真的不能再帮你了。