WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 4 | 5 || 7 |

Содержание работы. В данной работе рассматриваются программы, демонстрирующие основы работы с графическим интерфейсом пользователя и обработкой событий компонентов ГИП.

В данной работе для создания программы графопостроителя нам понадобится четыре класса, которые будут находиться в разных файлах.

Для того, чтобы в дальнейшем избежать путаницы, необходимо данные файлы поместить в отдельную папку (или, в интерпретации платформы Eclipse, в отдельный подпакет). Создайте новую папку, щелкнув правой кнопкой мыши на имени проекта в представлении Package explorer, и в раскрывшемся меню (рис. 15), выбрав пункт «Folder». Назовите ее «MyGraph». Затем в данной папке аналогично создайте четыре новых класса:

«Graphic» — главный класс, в котором будет метод main().

«Sinus» — класс графика синуса.

«Cosinus» — класс графика косинуса.

«X2» — класс графика параболы.

Помните, если классы описаны с любым из модификаторов видимости public, protected или private, то имена классов должны совпадать с именами файлов, в которых хранятся данные классы.

После того, как классы будут созданы, введите предложенный ниже код программы.

П р о г р а м м а 1. Построение графиков элементарных функций.

Класс Graphic package MyGraph;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Graphic extends JFrame{ Graphic(String s){ super(s);

setLayout(null);

setSize(120,200);

setVisible(true);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setResizable(false);

Button sin = new Button("Sin");

sin.setBounds(5, 20, 100, 25);

С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse add(sin);

Button cos = new Button("Cos");

cos.setBounds(5, 70, 100, 25);

add(cos);

Button x2 = new Button("Парабола");

x2.setBounds(5, 120, 100, 25);

add(x2);

sin.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ new Sinus("Синус");

} });

cos.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ new Cosinus("Косинус");

} });

x2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ new X2("Парабола");

} });

} public static void main(String[] args) { new Graphic("Графопостроитель");

} } Класс Sinus package MyGraph;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Sinus extends JFrame{ Sinus(String s){ super(s);

setLayout(null);

setSize(600,300);

setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setResizable(false);

this.setLocation(100, 100);

} public void paint(Graphics gr){ int y; int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 600, 300);

gr.setColor(Color.lightGray);

while(j<600){ С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse gr.drawLine(j, 0, j, 300);

j+=30;

} while(k<300){ gr.drawLine(0, k, 600, k);

k+=30;

} gr.setColor(Color.BLACK);

gr.drawLine(300, 0, 300, 300);

gr.drawLine(0, 150, 600, 150);

gr.drawLine(120, 140, 120, 160);

gr.drawLine(480, 140, 480, 160);

gr.drawString("0", 305, 165);

gr.drawString("-"+"\u03c0", 125, 140);

gr.drawString("\u03c0", 485, 140);

gr.setColor(Color.RED);

for(double i=0;i<1000;i++){ y=(int)(80*Math.sin(Math.PI*i/180));

gr.drawLine((int)i-240, y+150, (int)i-240, y+150);

} gr.dispose();

} } Класс Cosinus package MyGraph;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Cosinus extends JFrame{ Cosinus(String s){ super(s);

setLayout(null);

setSize(600,300);

setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setResizable(false);

this.setLocation(200, 200);

} public void paint(Graphics gr){ int y; int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 600, 300);

gr.setColor(Color.lightGray);

while(j<600){ gr.drawLine(j, 0, j, 300);

j+=30;

} while(k<300){ С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse gr.drawLine(0, k, 600, k);

k+=30;

} gr.setColor(Color.BLACK);

gr.drawLine(300, 0, 300, 300);

gr.drawLine(0, 150, 600, 150);

gr.drawLine(120, 140, 120, 160);

gr.drawLine(480, 140, 480, 160);

gr.drawString("0", 305, 165);

gr.drawString("-"+"\u03c0", 125, 140);

gr.drawString("\u03c0", 485, 140);

gr.setColor(Color.RED);

for(double i=0;i<1000;i++){ y=(int)(80*Math.cos(Math.PI*i/180));

gr.drawLine((int)i-240, y+150, (int)i-240, y+150);

} gr.dispose();

} } Класс Xpackage MyGraph;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class X2 extends JFrame{ X2(String s){ super(s);

setLayout(null);

setSize(600,300);

setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setResizable(false);

this.setLocation(300, 300);

} public void paint(Graphics gr){ int y; int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 600, 300);

gr.setColor(Color.lightGray);

while(j<600){ gr.drawLine(j, 0, j, 300);

j+=50;

} while(k<300){ gr.drawLine(0, k, 600, k);

k+=50;

} gr.setColor(Color.BLACK);

С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse gr.drawLine(300, 0, 300, 300);



gr.drawLine(0, 150, 600, 150);

gr.drawString("0", 305, 165);

gr.setColor(Color.RED);

for(double i=0;i<1000;i++){ y=-(int)(i*i/300)+150;

gr.drawLine((int)i+300, y, (int)i+300, y);

gr.drawLine(-(int)i+300, y, -(int)i+300, y);

} gr.dispose();

} } В классе Graphics описано окно размером 120х200, в котором расположены три кнопки. Нажатие кнопки обслуживается (обрабатывается) специальной процедурой, которая называется процедурой обработки события ActionEvent. При нажатии кнопки происходит создание новой формы, в которой будет построен соответствующий график элементарной функции (22-26, 27-31, 32-36).

Классы обработчиков событий описаны внутри параметра метода добавления слушателя addActionListener() (22, 27, 32). Интересно, что параметром этого метода является новый объект интерфейса ActionListener с одним методом actionPerformed(), который и отвечает за поведение программы, в случае если будет вызвано данное событие (нажатие на кнопки).

В классах, которые производят построение графиков, в строках 20-27 с использованием двух циклов происходит построение координатной сетки светло-серым цветом, затем черным цветом строятся оси абсцисс и ординат.

Наибольший интерес представляют строки 37-40 (для синуса и косинуса) и 33-37 (для параболы) в которых происходит рисование графиков. Синус и косинус рисуются по аналогии: вначале вычисляется значение y и методом drawString() рисуется «линия» длиной в один пиксел. Координата y вычисляется путем явного преобразования типа double в тип int, полученного в результате выполнения выражения 80*Math.cos(Math.PI*i/180).

Парабола строится аналогичным способом, в два этапа. На первом этапе строится положительная часть параболы и далее отрицательная.

П р о г р а м м а 2. Надписи на кнопках.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class ExtEventHandler extends JFrame { С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse 05 ExtEventHandler(String s){ super(s);

setLayout(null);

08 setSize(100,200);

setVisible(true);

setResizable(false);

setDefaultCloseOperation(EXIT_ON_CLOSE);

Button b1 = new Button("Первая кнопка");

13 b1.setBounds(2, 5, 96, 22);

14 add(b1);

Button b2 = new Button("Вторая кнопка");

16 b2.setBounds(2, 100, 96, 22);

17 add(b2);

b1.addActionListener(new Handler(b1, b2));

b2.addActionListener(new Handler(b1, b2));

20 } public static void main(String[] args) { new ExtEventHandler("");

23 } 24 } class Handler implements ActionListener{ private Button ba;

private Button bb;

28 String temp;

29 Handler(Button b1, Button b2){ this.ba=b1;

this.bb=b2;

32 } public void actionPerformed(ActionEvent e) { 34 temp = ba.getLabel();

35 ba.setLabel(bb.getLabel());

bb.setLabel(temp);

37 } 38 } В классе ExtEventHandler (04-24) приводится основное описание интерфейса пользователя: форма размером 100x200 и две кнопки с надписями: первая кнопка (12-14) и вторая кнопка (15-17).

В приложении для обработки событий, которые возникают при нажатии на кнопки, описан отдельный класс Handler (25-38), который использует интерфейс ActionListener.

Поскольку в описании ActionListener нельзя напрямую использовать компоненты, описанные в конструкторе класса ExtEventHandler, то нужно создать ссылки на объекты, которые будут использованы. Создание ссылочных объектов производится в строках 26, 27, а сами ссылки создаются в конструкторе (30, 31). Когда ссылки готовы, в процессе добавления слушателей (18, 19), в параметрах указываем имена реальных компонентов.

С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse Таким образом, при нажатии на любую из двух кнопок меняются местами их надписи (34-36).

Задания к работе 1. Создайте форму размером 500х500 и нарисуйте на ней домик.

2. Сумматор. Создайте приложение, которое представляет собой форму 200х150. На форме разместите три текстовых поля и одну кнопку с надписью «Расчет». При нажатии на кнопку значения, введенные в первые два текстовых поля, складываются и результат записывается в третье поле.

Лабораторная работа №Тема работы. Апплеты.

Цель работы. Знакомство с элементами разработки Java-апплетов.

Содержание работы. Разработка апплетов.

П р о г р а м м а 1. Простейший апплет.

import java.awt.*;

import java.applet.*;

public class My_Applet extends Applet{ public void paint(Graphics g){ g.drawString("Hello, World!", 5, 30);

06 } 07 } Приложение представляет собой простейший Java-апплет, в котором выводится строка с использованием ранее рассмотренного метода (05) drawString().

Для запуска и просмотра апплетов в Eclipse используется специальное программное средство AppletViewer.

П р о г р а м м а 2. Использование элементов графического интерфейса пользователя в апплетах.

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.applet.*;

public class My_Applet extends Applet{ public void init(){ setLayout(null);

final TextField tf1 = new TextField(15);

09 tf1.setBounds(1, 1, 100, 20);

10 add(tf1);

final TextField tf2 = new TextField(15);

12 tf2.setBounds(1, 25, 100, 20);

13 add(tf2);

С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse final TextField tf3 = new TextField(15);





15 tf3.setBounds(1, 50, 100, 20);

16 add(tf3);

Button b1 = new Button("Кнопка 1");

18 b1.setBounds(1, 100, 100, 20);

19 add(b1);

b1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ try{ tf3.setText(String.valueOf((Long.valueOf(tf1.getText()) +Long.valueOf(tf2.getText()))));

}catch(Exception e){ 25 tf3.setText("Введите числа");

26 } 27 } 28 });

29 } 30 } В данной программе описан апплет, в котором расположены три текстовых поля и одна кнопка. При нажатии на кнопку введенные численные значения первых двух полей складываются и результат записывается в третье поле (вторая задача из лабораторной работы №8).

В отличие от обычных приложений Java, в апплетах инициализация и добавление компонентов графического интерфейса пользователя осуществляется не в конструкторе, а в методе init().

Задания к работе 1. Выполните задание 1 из лабораторной работы №8 в форме апплета.

2. Создайте апплет, в котором при нажатии на кнопку выводится матрица 3х3. Используйте метод drawString().

Лабораторная работа №Тема работы. Приложение «Калькулятор».

Цель работы. Знакомство со сложным приложением Java.

Содержание работы. Анализ и подробный разбор кода. Запуск и тестирование приложения.

П р о г р а м м а 1. Калькулятор.

import java.awt.*; // Импорт пакета awt import java.awt.event.*; // Импорт пакета обработки событий import javax.swing.*; // Импорт пакета swing public class Calc extends JFrame{ // Начало класса Calc, наслед.

от класса JFrame double temp = 0; // Объявление переменной temp типа double Char op = ''; // Объявление переменной op типа char Calc(String s){ // Начало определения конструктора Calc С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse super(s); // Вызов конструктора суперкласса (JFrame) setLayout(null); // Отказ от менеджера размещения setSize(250,250); // Установка размеров окна setVisible(true); // Установка видимости на экране this.setDefaultCloseOperation(EXIT_ON_CLOSE); // Установка по умолчанию для закрытия окна final TextField display = new TextField(""); // Создание объекта типа TextField с именем display (Поле ввода) display.setEditable(false); // Запрещение редактирования display.setBounds(2, 2, 238, 22);// Установка расположения и размеров поля ввода add(display); // Добавление поля ввода в контейнер окна Строки 17-61 описывают 17 Button b1 = new Button("1");

создание 15 кнопок:

b1.setBounds(2,30,40,40);

10 кнопок для ввода цифр, add(b1);

4 кнопки для основных Button b2 = new Button("2");

арифметических операций и 21 b2.setBounds(52,30,40,40);

одна кнопка для расчета результата. После 22 add(b2);

создания каждой из кнопок 23 Button b3 = new Button("3");

устанавливаются их 24 b3.setBounds(102,30,40,40);

местоположения и размеры.

25 add(b3);

Затем кнопки добавляются 26 Button b4 = new Button("4");

в контейнер окна.

27 b4.setBounds(2,80,40,40);

28 add(b4);

29 Button b5 = new Button("5");

30 b5.setBounds(52,80,40,40);

31 add(b5);

32 Button b6 = new Button("6");

33 b6.setBounds(102,80,40,40);

34 add(b6);

35 Button b7 = new Button("7");

36 b7.setBounds(2,130,40,40);

37 add(b7);

38 Button b8 = new Button("8");

39 b8.setBounds(52,130,40,40);

40 add(b8);

41 Button b9 = new Button("9");

42 b9.setBounds(102,130,40,40);

43 add(b9);

44 Button b0 = new Button("0");

45 b0.setBounds(2,180,40,40);

46 add(b0);

47 Button beq = new Button("=");

48 beq.setBounds(52,180,90,40);

49 add(beq);

Button bplus = new Button("+");

51 bplus.setBounds(152,30,80,40);

52 add(bplus);

53 Button bminus = new С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse Button("-");

bminus.setBounds(152,80,80,40);

55 add(bminus);

56 Button bmul = new Button("*");

57 bmul.setBounds(152,130,80,40);

58 add(bmul);

59 Button bdiv = new Button("/");

60 bdiv.setBounds(152,180,80,40);

61 add(bdiv);

В строках b1.addActionListener(new ActionListener() 62-140 для { каждой из public void actionPerformed(ActionEvent кнопок event) { производится 64 display.setText(display.getText()+"1");

обработка событий на 65 } нажатие.

66 });

Для цифровых b2.addActionListener(new ActionListener() кнопок — { добавление к public void actionPerformed(ActionEvent тексту поля ввода event) { соответствующей 69 display.setText(display.getText()+"2");

цифры, для 70 } арифметических 71 });

операций — b3.addActionListener(new ActionListener() установка «флага» op { соответствующей public void actionPerformed(ActionEvent операции, event) { сохранение в 74 display.setText(display.getText()+"3");

переменной temp 75 } введенного в поле display 76 });

числа, путем b4.addActionListener(new ActionListener() преобразования { строки в число public void actionPerformed(ActionEvent и очистка event) { дисплея.

79 display.setText(display.getText()+"4");

80 } 81 });

b5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { 84 display.setText(display.getText()+"5");

85 } 86 });

b6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { 89 display.setText(display.getText()+"6");

С.А. Казарин, А.П. Клишин, Среда разработки Java-приложений Eclipse 90 } 91 });

Pages:     | 1 |   ...   | 4 | 5 || 7 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.