Несмотря на свою большую популярность многие из тех кто начинает его изучение останавливаются ещё на моменте создания консольных программ. Это как-то неверно, поэтому давайте развеем миф про сложность работы с Java и создадим приложение с интерфейсом, функциями и работой с API.
Наша программа будет на языке Джава и она должна иметь графический интерфейс. Чтобы обеспечить такую смесь лучше всего установить и работать с библиотекой JavaFx. Скачать библиотеку можно по
Также зайдите на сайт Oracle и
Через любую среду разработки создайте новый JavaFx проект.
После создания проекта нужно добавить библиотеку JavaFx. Если вы работаете с Intellij IDEA, то вам нужно зайти в «File - Project Structure», далее перейти в модули и добавить в качестве нового модуля все файлы из папки lib
, что находится в
После заходим в настройки: «Run - Edit configuration» и в поле «VM Options» прописываем полный путь к папке JavaFx:
--module-path
D:\Java\javafx-sdk-11.0.2\lib (Вот здесь прописываете ваш путь)
--add-modules
javafx.controls,javafx.fxml
Для создания дизайна используйте программу
После перетаскивания объектов и добавления к ним стилей, вы можете добавить ID для объектов, с которыми вы будете взаимодействовать, а также вам стоит указать рабочий контроллер для обработки всех функций в приложении.
В этой же программе можно посмотреть готовый вариант дизайна, а также же можно получить шаблон кода для класса контроллера. Для этого переходим: «View - Show sample skeletone code», где мы получаем весь код и копируем его. Этот же код разместите в контроллере вашего приложения.
Теперь нам нужно создать весь функционал для приложения.
В приложении мы будем получать данные о погоде. Чтобы это делать сперва зарегистрируйтесь и получите API ключ на сайте
Теперь остается прописать весь код. Он представлен ниже вместе с комментариями:
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();
}
}
Также вы можете просмотреть детальное видео по разработке данного приложения:
На нашем сайте также есть