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