КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Методические указания. Апплет должен быть создан на основе шаблонов, содержащихся в Приложении 6(или при помощи системы Java Applet Wizard)
Объявление элементов класса апплета. В классе апплета объявим следующие элементы: // выводимые строки String strs[]={"First string", "Second string", "Third string"}; // текущий размер окна апплета Dimension appSize; Перерисовка окна апплета (метод paint()). Для перерисовки изображения в окне используется метод paint(), которому передается объект g типа Graphics (g - контекст отображения для окна). Методами этого класса пользуются для вывода графической информации в окно апплета. В данном апплете этот метод используется для определения текущего размера appSize окна и для закраски фона окна и рисовании рамки окна. Сначала раскрасим фон окна и нарисуем рамку окна. Для этого сделаем следующие действия: при помощи метода size() класса апплета получим текущий размер окна и присвоим ссылку на него объекту appSize; методом g.setColor() выберем цвет фона Color.yellow; зарисуем всю внутреннюю область окна с помощью метода g.fillRect() и объекта appSize; методом g.setColor() выберем цвет рамки Color.black; нарисуем рамку вокруг окна методом g.drawRect(), используя объект appSize. Метод, работающий в рамках отдельного потока (метод run()). Поток, выполняющийся в рамках метода run() одновременно с кодом апплета, будет по очереди извлекать строки из массива strs и отображать их в нижней части окна: Сначала определим переменные метода и получим контекст окна апплета и высоту символов текущего шрифта: public void run() { int counter=0; // счетчик сдвигов int current=0; // номер текущей рисуемой строки int hy=1; // размер сдвига по вертикали Graphics g=getGraphics(); // контекст окна апплета int yChar=g.getFontMetrics().getHeight(); // высота символа while (true) { try { // вывод в окно апплета Thread.sleep(50); } catch (InterruptedException e) { stop(); } } } В блоке try метода run() выполним свертку окна апплета: 1) с помощью метода g.copyArea() скопируем верхнюю часть экрана, ограниченную прямоугольником с началом в точке (0, hy+1), шириной appSize.width-1 и высотой appSize.height-1, в область с началом в точке (0, -hy); 2) методом g.setColor() выберем цвет фона Color.yellow; 3) нарисуем методом g.fillRect() прямоугольник с началом в точке (1, appSize.height-hy-1), шириной appSize.width-2 и высотой hy. Далее увеличим счетчик сдвигов counter на 1, а затем проверим его. Если значение counter равно yChar+5 (то есть сдвинута полная строка), то рисуем строку с номером current в нижней части окна. Для этого: 1) сбрасываем счетчик сдвигов counter в 0; 2) если строка первая (current равно 0) то методом g.setColor() устанавливаем красный цвет, иначе - черный; 3) методом g.drawString() выводим строку с номером current в точке с координатами (10, appSize.height-10); 4) увеличиваем номер текущей рисуемой строки current на 1; 5) если нарисованы все строки (current больше или равно strs.length), то устанавливаем номер текущей рисуемой строки current в 0. Далее выполняется задержка на 50 миллисекунд, после чего работа бесконечного цикла возобновляется с самого начала.
Задания к лабораторной работе Задание 1. Проверить и объяснить работу апплетов MultiTask, DoubleTask и Multi, рассматриваемых в данной главе в качестве примеров и отмеченных курсивом. Задание 2. Создать апплет двойного назначения VertScroller и объяснить его работу. Задание 3. Дать ответы на контрольные вопросы.
Контрольные вопросы 45. Что такое процесс (задача) и поток (нить)? 46. Чем определяется порядок передачи управления потоками? 47. Какие есть способы реализации многозадачности в Java? 48. Что необходимо сделать для создания подкласса потоков (подкласса Thread)? 49. Когда запускается на выполнение метод run() подкласса Thread? 50. Какими методами класса Thread необходимо запускать поток на выполнение и останавли- вать его? 7. Что необходимо сделать для реализации классом интерфейса Runnable? 8. В каких состояниях может находиться поток? 9. Какой поток считается новым, выполняемым и завершенным? 10. В каких ситуациях поток является невыполняемым? 11. Когда возникают исключительные ситуации при работе с потоками? 12. Что такое приоритетная система и какой системой является виртуальная машина Java? 13. Что такое группы потоков и чем они полезны? 14. Что такое родовая группа потоков и главная группа потоков? 15. Чем определяется уровень защиты группы потоков?
ЛАБОРАТОРНАЯ РАБОТА № 7 АВТОНОМНЫЕ ПРИЛОЖЕНИЯ. ПОТОКИ ДАННЫХ. РАБОТА С ЛОКАЛЬНЫМИ ФАЙЛАМИ (2 ЧАСА) МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ Язык Java очень широко используется для создания апплетов, встраиваемых в html-страницы, однако необходимость реализации апплетов на компьютерах пользователей сети WWW накладывает на них некоторые ограничения. Так, например, апплеты не имеют доступа к файлам, расположенным на удаленном компьютере, на котором эти апплеты были запущены, хотя и могут при этом обращаться к файлам, которые находятся в каталоге сервера WWW, откуда эти апплеты были загружены. Программировать на языке Java можно и за рамками модели апплета, создавая отдельные, независимые приложения. Эти приложения похожи на обычные программы, написанные на других языках программирования, и имеют доступ к локальной файловой системе компьютера, на котором они запущены. Автономные приложения Java могут работать также и с удаленными файлами (через сеть Internet или Intranet). 1. Самостоятельные графические приложения Рассмотрим, как в самостоятельных приложениях создать графический интерфейс пользователя, работающий без оболочки времени выполнения. Все, что нужно для создания отдельного приложения Java, - это иметь метод main(), определенный в классе. Когда запускается программа java.exe на обработку этого класса, она вызывает метод main(). Для того, чтобы сделать приложение таким же дружественным и иллюстративным, как апплет, необходимо создать фрейм либо непосредственно в методе main(), либо в одном из методов, им вызываемом. Можно создавать не только объект класса Frame, но и его подклассов, например, как в приложении StandAlone (пример 1). Текст подобного шаблонного файла содержится в Приложении 7 и его можно в дальнейшем использовать в качестве шаблона самостоятельного графического Java-приложения. /*------------- Пример 1. Файл StandAlone.java -------------*/ import java.awt.*; // Основной класс для приложения StandAlone public class StandAlone { public static void main(String args[]) {// Создать рамку (фрейм) MainWndFrame frame = new MainWndFrame("Title"); // Отображение окна фрейма frame.show(); } // Сделать: Добавьте сюда код, необходимый для работы // создаваемого специализированного приложения } // Класс главного фрейма для приложения class MainWndFrame extends Frame { public MainWndFrame(String str) // конструктор { super (str); // Сделать: Добавьте сюда код конструктора resize(320,240); // задание необходимых размеров окна // здесь можно определить различные параметры фрейма, // например, форму курсора, меню, добавить компоненты и др. } public boolean handleEvent(Event evt) // обработчик событий { switch (evt.id) { case Event.WINDOW_DESTROY: // при закрытии окна завершается работа приложения //------------------------------------------------- // Сделать: Добавьте сюда код, который должен // работать при остановке приложения dispose(); // удаление окна System.exit(0); // завершение приложение return true; default: // передача сообщения на обработку // методу базового класса return super.handleEvent(evt); } } } В предыдущих главах подробно рассматривался Abstract Windowing Toolkit (AWT). Все элементы управления и контейнеры можно использовать и при создании отдельного графического приложения. Можно также создать подкласс Applet и ввести его во фрейм, тогда отдельное графическое приложения будет использовать все возможности апплетов (включая получение графических и звуковых данных из Internet). Графические данные из Internet (без создания объекта подкласса Applet) можно получить при помощи класса Toolkit. Класс Toolkit - это абстрактный класс, который служит связкой между AWT и локальной системой управления окнами. Этот класс определяет метод getImage(), который работает аналогично методу с таким же именем класса Applet. Чтобы из самостоятельного приложения получить изображение из Internet, следует внутри любого подкласса Frame сделать следующие действия: Toolkit T=getToolkit(); Im=T.getImage(U); // U - URL-адрес, объект класса URL Теперь, за исключением проигрывания звуковых фрагментов, можно сделать с отдельными приложениями все, что можно сделать с апплетами. Для приложения можно воспользоваться другой версией метода getImage() класса Toolkit для загрузки графических данных прямо из файловой системы (без использования только URL-адреса), как это сделано в следующем классе фрейма: class MainWndFrame extends Frame { Image Im; public MainWndFrame(String str) // конструктор { super (str); // Сделать: Добавьте сюда код конструктора Toolkit T=getToolkit(); Im=T.getImage("image.gif"); // файл из текущего каталога } public void paint(Graphics g) { g.drawImage(Im,10,10,this); } // остальной код класса ........................ } В данном случае метод getImage() ищет файл image.gif в текущем каталоге файловой системы.
Дата добавления: 2014-11-20; Просмотров: 461; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |