it Новости Создание Java программы с дизайном! Изучение библиотеки JavaFx
Создание Java программы с дизайном! Изучение библиотеки JavaFx

Создание Java программы с дизайном! Изучение библиотеки JavaFx

1 929
18 сентября 2020 в 16:45

Разработка программ на Java – не особо сложный процесс. В статье мы разработаем крутое приложение с отличным дизайном и функциями. Для программы мы воспользуемся JavaFx.

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

Наша программа будет на языке Джава и она должна иметь графический интерфейс. Чтобы обеспечить такую смесь лучше всего установить и работать с библиотекой 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», где мы получаем весь код и копируем его. Этот же код разместите в контроллере вашего приложения.


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

Остается прописать весь функционал. Ниже представлен полный код основного контроллера, но также по этой ссылке вы можете скачать готовый проект всей программы.


Код класса контроллера: 

package sample;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.text.Text;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Controller {

	// Поля, что ссылаются на объекты внутри дизайна
	@FXML
	private ToggleGroup answers;

	@FXML
	private Text question_text;

	@FXML
	private RadioButton radio_btn_1;

	@FXML
	private RadioButton radio_btn_2;

	@FXML
	private RadioButton radio_btn_3;

	@FXML
	private RadioButton radio_btn_4;

	@FXML
	private Button answerBtn;

	// Массив на основе класса Questions. Каждый объект – вопрос с набором возможных ответов
	private Questions[] questions = new Questions[] {
		new Questions("В каком из вариантов представлен корректный формат вывода информации на экран?", new String[] {"Console.Write()", "console.log()", "print()", "System.out.println()"}),
			new Questions("Какой тип данных отвечает за целые числа?", new String[] {"String", "Float", "Boolean", "Integer"}),
			new Questions("Где правильно присвоено новое значение к многомерному массиву?", new String[] {"a(0)(0) = 1;", "a[0 0] = 1;", "a{0}{0} = 1;", "a[0][0] = 1;"}),
			new Questions("Какой метод позволяет запустить программу на Java?", new String[] {"Основного метода нет", "С класса, что был написан первым и с методов что есть внутри него", "Любой, его можно задавать в настройках проекта", "С метода main в любом из классов"}),
			new Questions("Каждый файл должен называется...", new String[] {"по имени первой библиотеки в нём", "по имени названия пакета", "как вам захочется", "по имени класса в нём"}),
			new Questions("Сколько параметров может принимать функция?", new String[] {"5", "10", "20", "неограниченное количество"})
	};

	// Переменные для установки текущего номера вопроса и для подсчета количества верных ответов
	private int nowQuestion = 0, correctAnswers;
	// В эту переменную будет устанавливаться корректный ответ текущего вопроса
	private String nowCorrectAnswer;

	@FXML
	public void initialize() {
		// Берем корректный ответ для текущего вопроса
		nowCorrectAnswer = questions[nowQuestion].correctAnswer();

		// Отслеживание нажатия на кнопку "Ответить"
		answerBtn.setOnAction(e -> {
			// Получаем выбранную кнопку пользователем
			RadioButton selectedRadioButton = (RadioButton) answers.getSelectedToggle();
			// Код будет выполняться только если пользователь выбрал ответ
			if(selectedRadioButton != null) {
				// Получаем текст ответа
				String toogleGroupValue = selectedRadioButton.getText();

				// Сверяем ответ с корректным
				if(toogleGroupValue.equals(nowCorrectAnswer)) {
					// Выводим информацию и увеличиваем количество верных ответов
					System.out.println("Верный ответ");
					correctAnswers++;
				} else
					System.out.println("Не верный ответ");

				// Если сейчас был последний вопрос, то скрываем все поля
				if(nowQuestion + 1 == questions.length) {
					radio_btn_1.setVisible(false); // Скрываем все поля для выбора
					radio_btn_2.setVisible(false);
					radio_btn_3.setVisible(false);
					radio_btn_4.setVisible(false);
					answerBtn.setVisible(false); // Скрываем кнопку ответа

					// Показываем текст в конце 
					question_text.setText("Вы ответили корректно на " + correctAnswers + " из " + questions.length + " вопросов!");
				} else { // Если еще есть вопросы...
					// Увеличиваем номер текущего вопроса
					nowQuestion++;
					// Указываем новый текст верного ответа
					nowCorrectAnswer = questions[nowQuestion].correctAnswer();

					// Меняем текст вопроса в программе
					question_text.setText(questions[nowQuestion].getQuestion());
					// Получаем массив ответов
					String[] answers = questions[nowQuestion].getAnswers();

					// Преобразовываем в список (так удобнее сортировать элементы)
					List<String> intList = Arrays.asList(answers);

					// Сортируем в случайном порядке
					Collections.shuffle(intList);

					// Подставляем ответы в радио кнопки
					radio_btn_1.setText(intList.get(0));
					radio_btn_2.setText(intList.get(1));
					radio_btn_3.setText(intList.get(2));
					radio_btn_4.setText(intList.get(3));

					// Снимаем выделение, что указал пользователь ранее
					selectedRadioButton.setSelected(false);
				}

			}
		});
	}

}

Видео на эту тему

Также вы можете просмотреть детальное видео по разработке данного приложения:




Дополнительный курс

На нашем сайте также есть углубленный курс по изучению языка Java. В ходе огромной программы вы изучите не только язык Java, но также научитесь создавать веб сайты, программы под ПК, приложения под Андроид и многое другое. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Java и создавать на нём полноценные проекты.


Больше интересных новостей

Комментарии для сайта Cackle