Найти тему

Своё приложение предсказуевущее погоду

Оглавление
https://avatars.mds.yandex.net/get-zen_doc/1585195/pub_5da2d185df944400ae6073e4_5da2d3ea1febd402a85ddb8a/scale_1200
https://avatars.mds.yandex.net/get-zen_doc/1585195/pub_5da2d185df944400ae6073e4_5da2d3ea1febd402a85ddb8a/scale_1200

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

Несмотря на свою большую популярность многие из тех кто начинает его изучение останавливаются ещё на моменте создания консольных программ. Это как-то неверно, поэтому давайте развеем миф про сложность работы с Java и создадим приложение с интерфейсом, функциями и работой с API.

Установка всего

Наша программа будет на языке Джава и она должна иметь графический интерфейс. Чтобы обеспечить такую смесь лучше всего установить и работать с библиотекой JavaFx. Скачать библиотеку можно по этой ссылке

Также зайдите на сайт Oracle и скачайте Java. Рекомендуем скачать и установить Java 11, так как с Java 13 будут разного рода ошибки при работе с Javafx. 

Создание проекта

Через любую среду разработки создайте новый JavaFx проект.

После создания проекта нужно добавить библиотеку JavaFx. Если вы работаете с Intellij IDEA, то вам нужно зайти в «File - Project Structure», далее перейти в модули и добавить в качестве нового модуля все файлы из папки lib, что находится в скачанной папке JavaFx. После добавления не забываем установить галочку, а также нажать на Окей.

После заходим в настройки: «Run - Edit configuration» и в поле «VM Options» прописываем полный путь к папке JavaFx:

--module-path

D:\Java\javafx-sdk-11.0.2\lib (Вот здесь прописываете ваш путь)

--add-modules

javafx.controls,javafx.fxml

Создание дизайна

Для создания дизайна используйте программу Scene Builder. Внутри неё откройте ваш проект, а именно файл «sample.fxml». Через эту программу вы можете прописать весь дизайн для приложения. 

После перетаскивания объектов и добавления к ним стилей, вы можете добавить ID для объектов, с которыми вы будете взаимодействовать, а также вам стоит указать рабочий контроллер для обработки всех функций в приложении.

В этой же программе можно посмотреть готовый вариант дизайна, а также же можно получить шаблон кода для класса контроллера. Для этого переходим: «View - Show sample skeletone code», где мы получаем весь код и копируем его. Этот же код разместите в контроллере вашего приложения.

Создание функций

Теперь нам нужно создать весь функционал для приложения. 

В приложении мы будем получать данные о погоде. Чтобы это делать сперва зарегистрируйтесь и получите API ключ на сайте 

OpenWeaterMap. Также скачайте библиотеку JSON Java и импортируйте её в проект точно также, как это было сделано с JavaFx.

Теперь остается прописать весь код. Он представлен ниже вместе с комментариями:

package sample;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.ResourceBundle;

import javafx.fxml.FXML;

import javafx.scene.control.Button;

import javafx.scene.control.TextField;

import javafx.scene.image.ImageView;

import javafx.scene.text.Text;

import org.json.JSONObject;

public class Controller {

@FXML

private ResourceBundle resources;

@FXML

private URL location;

// Переменные, ссылающиеся на объекты из окна приложения

@FXML

private TextField city;

@FXML

private Text temp_info;

@FXML

private Text temp_max;

@FXML

private Text temp_min;

@FXML

private Button getData;

@FXML

private Text temp_feels;

@FXML

private ImageView image;

@FXML

private Text pressure;

@FXML

void initialize() {

// При нажатии на кнопку

getData.setOnAction(event -> {

// Получаем данные из текстового поля

String getUserCity = city.getText().trim();

if(!getUserCity.equals("")) { // Если данные не пустые

// Получаем данные о погоде с сайта openweathermap

String output = getUrlContent("http://api.openweathermap.org/data/2.5/weather?q=" + getUserCity + "&appid=ВАШ_API_КЛЮЧ&units=metric");

if (!output.isEmpty()) { // Нет ошибки и такой город есть

JSONObject obj = new JSONObject(output);

// Обрабатываем JSON и устанавливаем данные в текстовые надписи

temp_info.setText("Температура: " + obj.getJSONObject("main").getDouble("temp"));

temp_feels.setText("Ощущается: " + obj.getJSONObject("main").getDouble("feels_like"));

temp_max.setText("Максимум: " + obj.getJSONObject("main").getDouble("temp_max"));

temp_min.setText("Минимум: " + obj.getJSONObject("main").getDouble("temp_min"));

pressure.setText("Давление: " + obj.getJSONObject("main").getDouble("pressure"));

}

}

});

}

// Обработка URL адреса и получение данных с него

private static String getUrlContent(String urlAdress) {

StringBuffer content = new StringBuffer();

try {

URL url = new URL(urlAdress);

URLConnection urlConn = url.openConnection();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));

String line;

while((line = bufferedReader.readLine()) != null) {

content.append(line + "\n");

}

bufferedReader.close();

} catch(Exception e) {

System.out.println("Такой город не

был найден!");

}

return content.toString();

}

}