Лабораторная работа №3 по курсу "DEV-J20. Программирование на платформе Java. Стандартные пакеты"
- Научится создавать графический интерфейс пользователя средствами технологии Java.
- Научится выполнять разметку пользовательского интерфейса с использованием менеджеров компоновки.
- Научиться обрабатывать события элементов управления.
- Научится использовать библиотечные элементы управления на примере панелей, кнопок, ползунков, меток.
- Научится позиционировать элементы управления с учётом требований к адаптивности и отзывчивости пользовательского интерфейса.
В рамках настоящей лабораторной работы рассматриваются следующие темы:
- создание оконного приложения:
- инициализация окна;
- открытие окна;
- основные свойства окна:
- фактический размер;
- предпочтительный размер.
- компоновка:
- понятие о контейнере;
- понятие об элементе управления;
- элемент управления "метка". Класс JLabel .
- элементы управления:
- панели;
- метки;
- кнопки;
- ползунки.
- события:
- модель обработки событий в Java;
- интерфейс EventListener ;
- эталон проектирования Adapter;
- применение Adadpter-а для упрощения обработки событий.
- менеджеры компоновки:
- интерфейс LayoutManager ;
- класс BorderLayout ;
- класс BoxLayout ;
- класс FlowLayout ;
- класс GridLayout .
В рамках лабораторной работы требуется разработать три приложения. Интерфейс каждого приложения описан прототипом, представляющим собой графическое схематическое изображение окна приложения, с расположенными на нём элементами управления и необходимыми комментариями.
Функционал, который необходимо разработать в рамках лабораторной работы описан в терминах функциональных требований к приложению.
Каждое приложение должно быть выполнено как отдельный проект. Таким образом должны получиться три проекта, размещённые в рамках одного решения. Каждый проект описывает одно приложение.
Приложение представляет собой инструмент, позволяющий пользователю выбирать цвет, с использованием графического пользовательского интерфейса.
Элемент управления, представляющий собой прямоугольную область, используемую для вывода цвета, будем называть - холст.
- При открытии приложения кнопка позиционируется по центру окна.
- Окно приложения поддерживает изменение размеров.
- Окно приложения поддерживает сворачивание на панель задач.
- Окно приложения поддерживает разворачивание на весь экран.
- Расстояние от всех элементов управления (кроме "холста") до правого края окна должно быть постоянным.
- Расстояния от "холста" до левого, верхнего и нижнего краёв окна должны быть постоянными.
- При наведении курсора мыши на "холст" должна появляться всплывающая подсказка, содержащая шестнадцатеричный код цвета.
- При изменении позиций ползунков, цвет "холста" должен изменяться на цвет, соответствующий позициям ползунков.
- При изменении позиций ползунков, цвет, соответствующий их позициям, должен быть записан в буфер обмена в виде строки, содержащей его шестнадцатеричный код.
Для взаимодействия с буфером обмена следует получить ссылку на объект класса Clipboard
. Получить ссылку на экземпляр данного класса можно с использованием экземпляра класса Toolkit
. Который, в свою очередь, может быть получен с использованием статического метода getDefaultToolkit
класса Toolkit
.
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
...
Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();
Для записи строки в буфер обмена следует вызвать метод SetText()
.
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
...
String text = "Textual data to copty to the clipboard!";
StringSelection selection = new StringSelection(text);
clipboard.setContents(selection, selection);
Пример использования данного класса может иметь следующий вид:
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;
public class ClipboardExample extends JFrame {
/**
* Кнопка инициации копирования текста в буфер обмена.
*/
private JButton button = new JButton("Copy to clipboard");
/**
* Текстовое поле, для ввода данных.
*/
private JTextField textField = new JTextField("Text to copy to clipboard ...");
/**
* Объект, для взаимодействия с буфером обмена.
*/
private Clipboard clipboard = Toolkit
.getDefaultToolkit()
.getSystemClipboard();
public ClipboardExample() {
// настраиваем окно
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationByPlatform(true);
setTitle("Clipboard interoperability example");
// добавляем элементы управления
add(button, BorderLayout.LINE_END);
add(textField);
// добавляем обработчик нажатия на кнопку
button.addActionListener(this::onButtonClick);
// упаковываем интерфейс так, чтобы всё поместилось на экране
pack();
}
/**
* Выполняет копирование тектса в буфер обмена.
*
* @param text текстовые данные, которые следует поместить в буфер обмена
*/
private void copyToClipboard(String text) {
StringSelection selection = new StringSelection(text);
clipboard.setContents(selection, selection);
}
/**
* Проверяет, что строка не пустая.
*
* @param text текстовые данные
* @returns ture, если переданная строка null, не содержит символов, или
* содержит только пробельные символы. В обратном случае - false.
*/
private boolean isBlank(String text) {
return text == null || text.trim().isEmpty();
}
/**
* Обработчик события нажатия на кнопку.
*
* <p> Выполняет копирование текста из текстового поля в буфер обмена,
* если тектс не пустой.
*
* @param e аргуметны события
*/
private void onButtonClick(ActionEvent e) {
String text = textField.getText();
if (!isBlank(text)) copyToClipboard(text);
}
}
Приложение представляет собой простейшую версию калькулятора, выполняющего основные арифметические действия.
Элемент управления, используемый для отображения вводимых пользователем данных и промежуточных результатов вычислений будем называть дисплеем приложения.
- Приложение должно выполнять сложение чисел.
- Приложение должно выполнять вычитание чисел.
- Приложение должно выполнять умножение чисел.
- Приложение должно выполнять деление чисел.
- Приложение должно позволять пользователю вводить число с использованием кнопок графического интерфейса пользователя.
- Приложение должно позволять пользователю вводить число с использованием кнопок клавиатуры.
- Окно приложения поддерживает сворачиванием на панель задач.
- Окно приложения не поддерживает разворачивание на весь экран.
- Окно приложения поддерживает изменение размеров.
- Окно приложения не позволяет изменять размеры окна более заданного максимального размера.
- Окно приложения не позволяет изменять размеры окна менее заданного минимального размера.
- Вводимые пользователем данные отображаются на дисплее приложения.
- Промежуточные результаты вычислений отображаются на дисплее приложения.
- Расстояние от дисплея до левого, верхнего и правого края клиентской части пользовательского интерфейса должно быть постоянным.
- При изменении размеров окна, позиции кнопок и их размеры изменяются пропорционально направлению изменения размера окна.
- Промежуточные результаты вычислений сохраняются в буфер обмена в виде текста.