0

我将创建一个 GUI,它将我读入的数据放入 ArrayList,并对这些数据执行操作,例如显示、排序和计算。

我的信息是天气数据。

在一个名为“FileReading”的类中,我将数据从 csv 读取到 ArrayList 中。然后我需要将此信息传递给名为“WeatherGUI”的 JFrame GUI 类,并对数据执行上述操作。

我无法将 ArrayList 中的信息传递给我的 GUI 类。因为我已经测试过它可以很好地将数据读入 ArrayList,所以我不会包含该代码。

这是我在 WeatherGUI 类中的相关代码,我将在下面描述错误

public class WeatherGUI extends JFrame implements ActionListener {
    private ArrayList<Weather> weather;
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    WeatherGUI frame = new WeatherGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public WeatherGUI(ArrayList<Weather> weather) {
        super("Weather");
        this.weather = weather;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 692, 561);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
    }

我遇到的错误出现在 try 语句中,其中 WeatherGUI 想要一个与我的 ArrayList 相关的参数,但我不知道该放什么。如果我输入“天气”,它会告诉我将天气设为静态,我知道这是不正确的。我添加的代码是讲师在幻灯片中提供的,但我仍然收到错误。

4

1 回答 1

0

这里:

WeatherGUI frame = new WeatherGUI();

您以 WeatherGUI 在创建时需要 List 的方式设计您的类(更喜欢在您的方法签名中使用 List 而不是 ArrayList!)。这是有道理的。

但这意味着:您必须在创建 GUI 对象之前读取该 List 对象,例如:

WeatherGUI frame = new WeatherGUI(FileReader.readWeatherInfos());

(例如哪里readWeatherInfos()会有签名public static List<Weather> readWeatherInfos())。或略有不同,例如:

List<Weather> tempWeather = new FileReader().readWeatherInfos();
WeatherGUI frame = new WeatherGUI(tempWeather);

(这里假设您的读取方法不是静态的)

你在课堂上不做任何静态的事情是正确的。你班级的weather领域是完全正确的。但是在 WeatherGUI 对象被实例化之前,您根本无法访问该字段!

于 2019-06-02T10:03:41.680 回答