Передача информации из ArrayList из одного класса в класс графического интерфейса WindowsBuilder - PullRequest
0 голосов
/ 02 июня 2019

Я должен создать графический интерфейс, который будет считывать данные, которые я прочитал, в ArrayList, и выполнять над ними такие действия, как отображение, сортировка и вычисления.

Моя информация - данные о погоде.

В классе «FileReading» я считываю свои данные из csv в ArrayList.Затем мне нужно передать эту информацию в мой класс графического интерфейса JFrame с именем «WeatherGUI» и выполнить указанные действия над данными.

У меня возникают проблемы при передаче информации из моего ArrayList в мой класс графического интерфейса пользователя.Поскольку я проверил, что он хорошо читает данные в 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, и я не уверен, что здесь поставить.Если я введу «погоду», она скажет мне сделать погоду статичной, что, я знаю, не правильно.Код, который я добавил, представлен на слайде, но я все еще получаю сообщение об ошибке.

1 Ответ

0 голосов
/ 02 июня 2019

Здесь:

WeatherGUI frame = new WeatherGUI();

Вы разработали свой класс таким образом, чтобы WeatherGUI нуждался в List (предпочитайте использовать List вместо ArrayList в сигнатурах вашего метода!) Во время создания. Что имеет смысл.

Но это означает: вы должны прочитать этот объект списка до создать объект GUI, например:

фрейм WeatherGUI = новый WeatherGUI (FileReader.readWeatherInfos ());

(где readWeatherInfos() будет иметь подпись, например public static List<Weather> readWeatherInfos()). Или немного другой, что-то вроде:

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

(здесь предполагается, что ваш метод чтения не статичен)

Вы правы в том, что не делает что-то статичное в вашем классе. Поле weather вашего класса полностью верно. Но вы просто не можете добраться до этого поля до создания объекта WeatherGUI!

...