有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java天气API在JFrame中的显示

我正在尝试创建一个基于java/swing的应用程序来显示天气。到目前为止,我已经创建了background和textfield+按钮来获取位置,但我不知道如何连接它,以便它显示并将背景更改为另一个图像。如果这是一个noob问题,我很抱歉,但我以前从未使用过java(只是处理和arduino plus web设计),我的大学强迫我使用高级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);
        }

    }





}

以及天气空气污染指数代码:

    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) 个答案

  1. # 1 楼答案

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

    此外,您还没有将ActionListener注册到您的按钮。如果你没有向按钮注册一个监听器,它就什么都做不了。做这个

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

    您还没有指定新图像来自何处,因此我真的无法再为您提供更多帮助