Изучить предлагаемый теоретический материал; реализуйте в виде программ на языке Java следующие задачи:
1. осуществить запись в файл большого произвольного массива данных, используя бинарные потоки, двумя способами: запись без и запись с использованием классов-фильтров, позволяющих выполнить буферизацию. Произвести замеры времени выполнения записи в файл и сравнить полученное ускорение. Указание: для отсчета времени в миллисекундах необходимо использовать системную функцию следующим образом: long timeStart =System.currentTimeMillis(). То же самое проделать для операции считывания данных из файла.
2. Расширить программу (апплет, на котором размещены кнопки для создания экземпляров Rectangle, ColoredRect, DrawableRect и реализована функция по перетаскиванию объектов мышью), созданную на прошлом лабораторном занятии, следующим образом. Добавить на апплет 2 кнопки – LoadFromFile и SaveToFile, одна из которых сериализует созданные объекты прямоугольников и сохраняет их в файл, другая – считывает из файла и продолжает работу программы с того момента, когда была осуществлена сериализация. Если программа была закрыта сразу после сериализации, то при повторном запуске программы и десериализации объектов, объекты должны располагаться на том же месте (обладать тем же состоянием), что и до закрытия программы. Программа должна позволять неограниченное число раз считывать объекты из файла, не удаляя при этом уже существующие. (SaveRect/Saverect)
Содержание отчета
1. цель работы;
2. введение;
3. программно-аппаратные средства, используемые при выполнении работы;
4. основную часть (описание самой работы), выполненную согласно требованиям к результатам выполнения лабораторного практикума;
5. заключение (описание результатов и выводы);
6. список используемой литературы.
Список рекомендуемой литературы
1. Шилдт, Герберт Java 8. Руководство для начинающих / Герберт Шилдт. - М.: Вильямс, 2015. - 720 c.
2. Гарнаев, Андрей WEB-программирование на Java и JavaScript / Андрей Гарнаев, Сергей Гарнаев. - Москва: СПб. [и др.]: Питер, 2017. - 718 c.
3. Гонсалвес, Энтони Изучаем Java EE 7 / Энтони Гонсалвес. - М.: Питер, 2016. - 640 c.
4. Гупта, Арун Java EE 7. Основы / Арун Гупта. - М.: Вильямс, 2014. - 336 c.
5. Савитч, Уолтер Язык Java. Курс программирования / Уолтер Савитч. - М.: Вильямс, 2015. - 928 c.
ЛАБОРАТОРНАЯ РАБОТА №6
Тема: пакет javax.swing, графический интерфейс
Цель: Целью работы является ознакомление со средствами построения графического интерфейса пользователя GUI с помощью компонент пакетов java.awt и javax.swing.
Методические указания к выполнению работы
Создание фрейма
Окно верхнего уровня в языке ява называется фреймом. В библиотеке awt для такого окна предусмотрен класс Frame. В библиотеке Swing для такого окна предусмотрен класс JFrame (аналог). Класс JFrame расширяет класс Frame и представляет собой один из немногих компонентов в библиотеке Swing, которые не отображаются на холсте (canvas). Кнопки, строка заголовков, пиктограммы и другие компоненты реализуются с помощью пользовательской оконной системы, а не библиотекой Swing.
Рассмотрим самые распространенные приемы работы с классом JFrame.
import javax.swing.*;
public class SimpleFrameTest{
public static void main(String[] args){
simple frame=new simple(); // создание экземпляра фрейма
//здесь можно создать несколько фреймов или включить
//их в описание класса SimpleFrameTest как поля
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //делает фрейм видимым }
}
/* в данном классе можно реализовывать различную функциональность окна. Например, разместить кнопки, списки, меню.*/
class simple extends JFrame{
public simple(){
setSize(200,300); // задание размера окна}
}
По умолчанию фрейм имеет размер 0x0 пикселей. Для задания размера фрейма используется метод setSize(int x, int y). Метод setDefaultCloseOperation определяет поведение фрейма при закрытии окна. Задание константы Jframe.EXIT_ON_CLOSE определяет закрытие приложения при закрытии фрейма.
Для задания позиционирования фрейма используется метод setLocation (int x, int y), где x и y – координаты левого верхнего угла фрейма.
Разработчики Java для запуска приложения с фреймом рекомендуют использовать диспетчер событий. Тогда предыдущий пример будет выглядеть следующим образом.
Import javax.swing.*;
public class SimpleFrameTest{
public static void main(String[] args){ EventQueue.invokeLater (new Runnable() { public void run()
{
simple frame=new simple(); // создание экземпляра фрейма frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //делает фрейм видимым
}
});
}}
class simple extends JFrame{
public simple(){
setSize(200,300); // задание размера окна}
}
Метод setIconImage() сообщает оконной системе о том, какая пиктограмма должна отображаться в строке заголовка.
Метод setTitle() позволяет изменить текст в окне заголовка.
Метод setResizible(), получающий в качестве параметра логическое значение и определяющий, имеет ли пользователь право изменять размеры фрейма. Определение подходящего размера фрейма можно выполнить с помощью методов класса Toolkit.
import javax.swing.*;
public class SimpleFrameTest{
public static void main(String[] args){ EventQueue.invokeLater (new Runnable() { public void run()
{
SizedFrame frame=new SizedFrame(); // создание экземпляра фрейма frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //делает фрейм видимым
}});
}}
class SizedFrame extends JFrame{
public SizedFrame(){
//класс взаимодействия с оконной системой ОС
Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screens = kit.getScreenSize(); int w,h;
w = screens.width;
h = screens.height;
setSize(w/2,h/2);
setLocation(w/4, h/4);
setTitle("My Frame");
Image img = kit.getImage(“Icon.gif”);
setIconImage(img);}}
Многооконные приложения
Как известно, окно в современных графических операционных системах используются для разделения задач, выполняемых пользователем, в одном из окон он может редактировать текст, в другом окне просматривать фотографии. Использование окон позволяет ему временно забыть про остальные свои задачи, не смешивая их, заниматься основным делом (в терминах оконной системы это будет активное в данный момент окно), и, как только возникает необходимость, переместиться к другой задаче (сделав активным другое окно, то есть вытащив его на первый план и временно убрав на задний план все остальное).
Как только концепция окон была изобретена и довольно успешно начала справляться с разделением задач пользователя на основную и второстепенные, возникло желание продвинуться немного дальше и применить ее уже внутри одного приложение, то есть разделить задачу внутри окна на несколько задач используя все те же окна, но на этот раз уже внутри другого, главного, окна. Подобные интерфейсы и называются многодокументными. Приложения, берущие на вооружение такие интерфейсы, как правило, способны выполнять задачи такого широкого спектра, что уместить все в одно окно становится затруднительно без ущемления удобства пользователя. На помощь приходят дополнительные окна, в которых можно разместить информацию, которая имеет косвенное отношение к основной, выполняемой в данный момент, задаче.
Применение многодокументных интерфейсов на практике вызывает жаркие споры. Сам по себе интерфейс операционной системы является многодокументным приложением, и встраивание в него еще одного подобного интерфейса может запутывать пользователя. Окна операционной системы работают по своему, окна приложения по своему, и все это не прибавляет уверенности пользователю в том, что происходит и как этим следует управлять. Поэтому многие развитые многодокументные приложения постарались уменьшить количество и разнообразие дополнительных окон, чтобы уменьшить сложность для пользователя. Тем не менее, как показывает практика, полностью избавиться от дополнительных окон в сложных приложениях затруднительно, так что мы все-таки изучим возможности Swing в данном вопросе.