weatherapi在jframe中的显示

tzdcorbm  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(264)

我正在尝试创建一个基于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;
    }

}

谢谢你的帮助,我真的很绝望,因为我混淆了提交日期,我已经没有多少时间了。。。。

nxagd54h

nxagd54h1#

假设 label1 是你的背景标签,就用吧 label1.setIcon(...) . 你将传递给它的是 new ImageIcon 你还没有注册 ActionListener 按你的按钮。如果你不注册一个监听器到这个按钮,它就什么也做不了。做这个

button = new JButton("Check weather");
button.addActionListener(this);
add(button);

你还没有指定新图像的来源,所以我真的不能再帮你了。

相关问题