русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Разработка апплета по заданию к лабораторной работе


Дата добавления: 2015-06-12; просмотров: 772; Нарушение авторских прав


Для работы с библиотекой awt ее необходимо подключить. По аналогии с оператором include в языке c++ используется оператор import:

 

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import java.applet. *;

 

Стандартным образом создаем проект. В нем нам не понадобится метод main:

 

public class awt_example extends Applet {

public void init() {

 

Спроектируем наше приложение следующим образом. Основным контейнером будет frame размером 800 на 800 точек:

 

 

final Frame f = new Frame("Demo Frame");

 

f.setSize(800, 800);

 

Контейнер будет содержать большое текстовое поле и строку меню:

MenuBar mbar = new MenuBar();

 

f.setMenuBar(mbar);

 

final TextArea text = new TextArea("Enter text", 80, 40);

f.add("Center", text);

 

Попробуем создать строку меню «File», добавить пункт «New» и обработать событие щелчка по этому пункту. Реакцией на щелчок будет очистка текстового поля. Класс, описывающий меню, называется Menu. Соответственно, пункт меню – MenuItem. У каждого класса, входящего в библиотеку awt, есть пустой конструктор по умолчанию. Кроме того, как правило, есть конструктор с единственным аргументом типа String, описывающим «маркировку» элемента на форме. Разумнее создавать элемент при помощи одного из этих двух конструкторов, а затем задавать свойства элемента при помощи метода, название которого начинается со слова Set.

 

Menu file = new Menu("File");

 

MenuItem mn_newitem = new MenuItem("New...");

 

file.add(mn_newitem);

 

mn_newitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

text.setText("");



}

});

Механизм обработки события в Java довольно сложен. Модель обработки событий Java 1.1 используется как в пакете AWT, так и в JavaBeans API. В этой модели разным типам событий соответствуют различные классы Java. Каждое событие является подклассом класса java.util.EventObject. События пакета AWT, которые и рассматриваются в данной главе, являются подклассом java.awt.AWTEvent. Для удобства события различных типов пакета AWT (например, MouseEvent или АсtionEvent) помещены в новый пакет java.awt.event.

Для каждого события существует порождающий его объект, который можно получить с помощью метода getSource(), и каждому событию пакета AWT соответствует определенный идентификатор, который позволяет получить метод getid(). Это значение используется для того, чтобы отличать события различных типов, которые могут описываться одним и тем же классом событий. Например, для класса FocusEvent возможны два типа событий: FocusEvent.FOCUS_GAINED и FocusEvent.FOCUS_LOST. Подклассы событий содержат информацию, связанную с данным типом события. Например, в классе MouseEvent существуют методы getX(), getY() и getClickCount (). Этот класс наследует, в числе прочих, и методы getModifiers() и getWhen().

Модель обработки событий Java 1.1 базируется на концепции слушателя событий (Listener). Слушателем события является объект, заинтересованный в получении данного события. В объекте, который порождает событие (в источнике событий), содержится список слушателей, заинтересованных в получении уведомления о том, что данное событие произошло, а также методы, которые позволяют слушателям добавлять или удалять себя из этого списка. Когда источник порождает событие (или когда объект источника зарегистрирует событие, связанное с вводом информации пользователем), он оповещает все объекты слушателей событий о том, что данное событие произошло.

Источник события оповещает объект слушателя путем вызова специального метода и передачи ему объекта события (экземпляра подкласса EventObject). Для того чтобы источник мог вызвать данный метод, он должен быть реализован для каждого слушателя. Это объясняется тем, что все слушатели событий определенного типа должны реализовывать соответствующий интерфейс. Например, объекты слушателей событий ActionEvent должны реализовывать интерфейс ActionListener. В пакете Java.awt.event определены интерфейсы слушателей для каждого из определенных в нем типов событий (например, для событий MouseEvent здесь определено два интерфейса слушателей: MouseListener и MouseMotionListener). Все интерфейсы слушателей событий являются расширениями интерфейса java.util.EventListener. В этом интерфейсе не определяется ни один из методов, но он играет роль интерфейса-метки, в котором однозначно определены все слушатели событий как таковые.

В интерфейсе слушателя событий может определяться несколько методов. Например, класс событий, подобный MouseEvent, описывает несколько событий, связанных с мышью, таких как события нажатия и отпускания кнопки мыши. Эти события вызывают различные методы соответствующего слушателя. По установленному соглашению, методам слушателей событий может быть передан один единственный аргумент, являющийся объектом того события, которое соответствует данному слушателю. В этом объекте должна содержаться вся информация, необходимая программе для формирования реакции на данное событие.

 

Добавим в меню пункты открытия файла и закрытия приложения:

 

MenuItem mn_openitem=new MenuItem("Open...");

 

file.add(mn_openitem);

 

file.add(new MenuItem("-"));

 

MenuItem mn_quititem = new MenuItem("Quit...");

 

file.add(mn_quititem);

 

mn_quititem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

System.exit(0);

}

});

 

Добавим еще одну группу пунктов меню «Edit», в которой пункт «Cut» будет отвечать за удаление выделенного текста:

final Menu edit = new Menu("Edit");

 

MenuItem mn_cutitem=edit.add(new MenuItem("Cut"));

mn_cutitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e)

{

 

text.replaceText("", text.getSelectionStart(), text.getSelectionEnd());

}

});

Самостоятельно разобраться со следующим кодом:

 

edit.add(new MenuItem("Copy"));

 

edit.add(new MenuItem("Paste"));

 

edit.add(new MenuItem("-"));

 

Menu sub = new Menu("Special");

 

sub.add(new MenuItem("First"));

 

sub.add(new MenuItem("Second"));

 

sub.add(new MenuItem("Third"));

 

 

edit.add(sub);

 

edit.add(new CheckboxMenuItem("Debug"));

 

edit.add(new CheckboxMenuItem("Testing"));

 

mbar.add(edit);

 

В работе необходимо самостоятельно реализовать пункты копирования и вставки текста в меню. Для этого необходимо самостоятельно изучить методы GetSelectedText и InsertText класса TextArea.

 

Весь код программы целиком:

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import java.applet. *;

 

public class awt_example extends Applet {

 

public void init() {

 

 

final Frame f = new Frame("Demo Frame");

 

f.setSize(800, 800);

 

MenuBar mbar = new MenuBar();

 

f.setMenuBar(mbar);

 

final TextArea text = new TextArea("Enter text", 80, 40);

f.add("Center", text);

 

 

Menu file = new Menu("File");

 

MenuItem mn_newitem = new MenuItem("New...");

 

file.add(mn_newitem);

 

mn_newitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

text.setText("");



}

});

 

file.add(new MenuItem("0pen..."));

 

 

file.add(new MenuItem("-"));

 

MenuItem mn_quititem = new MenuItem("Quit...");

 

file.add(mn_quititem);

 

mn_quititem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

System.exit(0);

}

});

 

 

mbar.add(file);

 

final Menu edit = new Menu("Edit");

 

MenuItem mn_cutitem=edit.add(new MenuItem("Cut"));

mn_cutitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e)

{

 

text.replaceText("", text.getSelectionStart(), text.getSelectionEnd());

}

});

 

 

edit.add(new MenuItem("Copy"));

 

edit.add(new MenuItem("Paste"));

 

edit.add(new MenuItem("-"));

 

Menu sub = new Menu("Special");

 

sub.add(new MenuItem("First"));

 

sub.add(new MenuItem("Second"));

 

sub.add(new MenuItem("Third"));

 

 

edit.add(sub);

 

edit.add(new CheckboxMenuItem("Debug"));

 

edit.add(new CheckboxMenuItem("Testing"));

 

mbar.add(edit);

 

f.show();

 

} }

Рис.4. Внешний вид приложения

Внешний вид приложения приведен на рис.3. В качестве альтернативного варианта предлагается код формы, содержащий текстовое окно, а также кнопки (рис.5):

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import java.applet. *;

 

import javax.swing.*;

import java.io.*;

@SuppressWarnings("serial")

public class awt_example extends Applet {

 

 

public void init() {

 

 

final Frame f = new Frame("Demo Frame");

 

f.setSize(640, 480);

f.setLayout(new BorderLayout());

MenuBar mbar = new MenuBar();

 

f.setMenuBar(mbar);

 

final TextArea text = new TextArea("Enter");

text.setSize(800, 500);

f.add(text, BorderLayout.NORTH);

 

JPanel pnl=new JPanel();

f.add(pnl, BorderLayout.CENTER);

 

pnl.setLayout(new FlowLayout(FlowLayout.LEFT,50,50));

 

Button btn1=new Button ("New");

btn1.setSize(40, 20);

 

pnl.add(btn1);

 

Button btn2=new Button ("Open");

btn2.setSize(40, 20);

 

pnl.add(btn2);

 

 

Button btn3=new Button ("Quit");

btn3.setSize(40, 20);

 

pnl.add(btn3);

 

 

Button btn4=new Button ("Cut");

btn4.setSize(40, 20);

 

pnl.add(btn4);

 

 

Button btn5=new Button ("Copy");

btn5.setSize(40, 20);

 

pnl.add(btn5);

 

Button btn6=new Button ("Paste");

btn6.setSize(40, 20);

 

pnl.add(btn6);

 

 

Menu file = new Menu("File");

 

MenuItem mn_newitem = new MenuItem("New...");

 

file.add(mn_newitem);

 

mn_newitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

text.setText("");



 

}

});

 

MenuItem mn_openitem=new MenuItem("Open...");

 

file.add(mn_openitem);

 

 

file.add(new MenuItem("-"));

 

MenuItem mn_quititem = new MenuItem("Quit...");

 

file.add(mn_quititem);

 

mn_quititem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e){

System.exit(0);

}

});

 

 

mbar.add(file);

 

final Menu edit = new Menu("Edit");

 

MenuItem mn_cutitem=edit.add(new MenuItem("Cut"));

mn_cutitem.addActionListener(new ActionListener(){

public void actionPerformed (ActionEvent e)

{

text.replaceText("", text.getSelectionStart(), text.getSelectionEnd());

System.out.println(copy_var);

 

}

});

 

 

final MenuItem mn_copyitem=edit.add(new MenuItem("Copy"));

 

 

MenuItem mn_pasteitem=edit.add(new MenuItem("Paste"));

 

 

btn2.addActionListener(new ActionListener(){

 

edit.add(new MenuItem("-"));

 

Menu sub = new Menu("Special");

 

sub.add(new MenuItem("First"));

 

sub.add(new MenuItem("Second"));

 

sub.add(new MenuItem("Third"));

 

 

edit.add(sub);

 

edit.add(new CheckboxMenuItem("Debug"));

 

edit.add(new CheckboxMenuItem("Testing"));

 

mbar.add(edit);

 

f.show();

 

} }

 

 

Рис.5. Альтернативный вариант окна.

 

Кроме того, необходимо самостоятельно реализовать открытие файла с помощью диалога открытия и выбора файла. Класс диалога находится в библиотеке swing. Для обращения к ней необходимо импортировать классы в начале описания: import javax.swing.*. Пример открытия файла через диалог, а также описание класса фильтра для данного диалога приведены ниже, внешний вид диалога – на рис.6:

 

JFileChooser fc = new JFileChooser();

ExtFileFilter ff1 = new ExtFileFilter("txt", "*.txt — текстовые файлы");

fc.addChoosableFileFilter(ff1);

 

if( fc.showOpenDialog(fc) == JFileChooser.APPROVE_OPTION) {

File f = fc.getSelectedFile();

 

 

BufferedReader in = null;

try {

in = new BufferedReader(new FileReader(f));

for(;;) {

String str = in.readLine();

if ( str == null )

break;

text.append(str+"\n");

}

} catch (IOException ex) {

ex.printStackTrace();

} finally {

if ( in != null )

try {

in.close();

} catch ( IOException ex ) {

}

}

}

}

 

 

class ExtFileFilter extends javax.swing.filechooser.FileFilter {

 

String ext;

String description;

 

ExtFileFilter(String ext, String descr) {

this.ext = ext;

description = descr;

}

 

public boolean accept(File f) {

if(f != null) {

if(f.isDirectory()) {

return true;

}

String extension = getExtension(f);

if( extension == null )

return (ext.length() == 0);

return ext.equals(extension);

}

return false;

}

 

public String getExtension(File f) {

if(f != null) {

String filename = f.getName();

int i = filename.lastIndexOf('.');

if(i>0 && i<filename.length()-1) {

return filename.substring(i+1).toLowerCase();

};

}

return null;

}

 

public String getDescription() {

return description;

}

 

}

 

Рис.6. Диалог открытия файла

 

Вопросы/задания к лабораторной работе:

1. Что такое апплет?

2. Как можно запускать апплеты?

3. Каков порядок вызова методов при запуске апплета?

4. Как задать цвет какого-либо компонента?

5. Как определить нужный шрифт, а затем применить его к какому-либо компоненту?

6. Как обрабатываются события пользователя?

7. Что такое контейнер?

8. Как размещаются элементы в контейнере?

9. Самостоятельно реализовать пункты «Copy» и «Paste».

10. Самостоятельно реализовать сохранение введенного текста в текстовый файл (путь к файлу произвольный).

11. Самостоятельно реализовать открытие текстового файла с диска, используя ДИАЛОГ открытия файла из библиотеки классов swing.

12. Самостоятельно изучить объект Button (кнопка): его свойства, методы, события.

13. Самостоятельно изучить объект Font (шрифт): свойства и работу со шрифтом

14. Самостоятельно изучить объект Layout, управляющий размещением компонентов в контейнере.

 

На защиту лабораторной работы выносятся все вышеозначенные вопросы, а также принципы размещения компонентов на форме. Вопрос может быть сформулирован следующим образом: создайте приложение определенного вида.

 




<== предыдущая лекция | следующая лекция ==>
Repaint(time) | Построение графиков функций на основе визуального интерфейса апплетов Java


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.11 сек.