Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Министерство образования и науки Российской Федерации. A=zeros(m,1);c=zeros(m+1,1);b=a;a1=a;f=c;b1=c;

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОУ ВПО «Благовещенский государственный педагогический университет»

Физико-математический факультет

Кафедра информатики и методики преподавания информатики

Курсовая работа

на тему: Создание иерархии классов плоских фигур на языке программирования Java

Исполнитель: студент группы   ­­­­­­­­­­­­­­­­ _____________ дата   ________________ подпись   Е.В.Сычкарёв
Руководитель: (к.т.н.,доцент) ­­­­­­­­­­­­­­­­ _____________ дата   ________________ подпись   Т.А.Галаган
Благовещенск 2011

СОДЕРЖАНИЕ

Введение.......................................................................................................... 3

Глава 1 Язык Java………………………………………………………………...4

1.1 Выполнение Java-программы………………………………………………...4

1.2 Объектно-ориентированное программирование в Java…………………….7

1.3 Принципы объектно-ориентированного программирования………………7

Глава 2 Принципы построения графического интерфейса………………….....9

Глава 3 Постановка задачи……………………………………………………...11

Глава 4 Алгоритм работы……………………………………………………….12

Глава 5 Описание классов, методов и переменных…………………………...14

Глава 6 Руководство пользователя……………………………………………..17

Заключение………………………………………………………………………21

Список литературы………………………………………….......................... 22

Приложение……………………………………………………………………....23


ВВЕДЕНИЕ

Сначала Java (официальный день рождения технологии Java – 23 мая 1995 г.) предназначалась для программирования бытовых электронных устройств, таких как телефоны. Потом Java стала применяться для программирования браузеров – появились апплеты. Затем оказалось, что на Java можно создавать полноценные приложения. Их графические элементы стали оформлять в виде компонентов – появились JavaBeans, с которыми Java вошла в мир распределенных систем и промежуточного программного обеспечения, тесно связавшись с технологией CORBA. Остался один шаг до программирования серверов – этот шаг был сделан – появились сервлеты и EJB (Enterprise JavaBeans). Серверы должны взаимодействовать с базами данных – появились драйверы JDBC (Java DataBase Connection). Взаимодействие оказалось удачным, и многие системы управления базами данных и даже операционные системы включили, Java в свое ядро, например Oracle, Linux, MacOS X, AIX. Что еще не охвачено? Назовите, и через полгода услышите, что Java уже вовсю применяется и там. Из-за этой размытости самого понятия его описывают таким же размытым словом – технология.

Такое быстрое и широкое распространение технологии Java не в последнюю очередь связано с тем, что она использует новый, специально созданный язык программирования, который так и называется – язык Java. Этот язык создан на базе языков Smalltalk, Pascal, C++ и др., вобрав их лучшие, по мнению создателей, черты и отбросив худшие. На этот счет есть разные мнения, но бесспорно, что язык получился удобным для изучения, написанные на нем программы легко читаются и отлаживаются: первую программу можно написать уже через час после начала изучения языка. Язык Java становится языком обучения объектно-ориентированному программированию, так же, как язык Pascal был языком обучения структурному программированию.

ГЛАВА 1 ЯЗЫК JAVA

1.1 Выполнение Java-программы

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

Исходный модуль, написанный на Java, не может избежать этих процедур, но здесь проявляется главная особенность технологии Java – программа компилируется сразу в машинные команды, но не команды какого-то конкретного процессора, а в команды так называемой виртуальной машины Java (JVM, Java Virtual Machine). Виртуальная машина Java – это совокупность команд вместе с системой их выполнения. Для специалистов скажем, что виртуальная машина Java полностью стековая, так что не требуется сложная адресация ячеек памяти и большое количество регистров. Поэтому команды JVM короткие, большинство из них имеет длину 1 байт, отчего команды JVM называют байт кодами, хотя имеются команды длиной 2 и 3 байта. Согласно статистическим исследованиям средняя длина команды составляет 1,8 байта. Полное описание команд и всей архитектуры JVM содержится в спецификации виртуальной машины Java (VMS, Virtual Machine Specification). Если вы хотите в точности узнать, как работает виртуальная машина Java, ознакомьтесь с этой спецификацией.

Другая особенность Java – все стандартные функции, вызываемые в программе, подключаются к ней только на этапе выполнения, а не включаются в байт-коды. Как говорят специалисты, происходит динамическая компоновка. Это тоже сильно уменьшает объем откомпилированной программы.

Итак, на первом этапе программа, написанная на языке Java, переводится компилятором в байт-коды. Эта компиляция не зависит от типа какого-либо конкретного процессора и архитектуры некоего конкретного компьютера. Она может быть выполнена один раз сразу же после написания программы. Байт-коды записываются в одном или нескольких файлах, могут храниться во внешней памяти или передаваться по сети. Это особенно удобно благодаря небольшому размеру файлов с байт-кодами. Затем полученные в результате компиляции байт-коды можно выполнять на любом компьютере, имеющем систему, реализующую JVM. При этом не важен ни тип процессора, ни архитектура компьютера. Так реализуется принцип Java "Write once, run anywhere" – "Написано однажды, выполняется где угодно".

Интерпретация байт-кодов и динамическая компоновка значительно замедляют выполнение программ. Это не имеет значения в тех ситуациях, когда байт-коды передаются по сети, сеть все равно медленнее любой интерпретации, но в других ситуациях требуется мощный и быстрый компьютер. Поэтому постоянно идет усовершенствование интерпретаторов в сторону увеличения скорости интерпретации. Разработаны JIT-компиляторы (Just-In-Time), запоминающие уже интерпретированные участки кода в машинных командах процессора и просто выполняющие эти участки при повторном обращении, например, в циклах. Это значительно увеличивает скорость повторяющихся вычислений. Фирма SUN разработала целую технологию Hot-Spot и включает ее в свою виртуальную машину Java. Но, конечно, наибольшую скорость может дать только специализированный процессор.

Фирма SUN Microsystems выпустила микропроцессоры PicoJava, работающие на системе команд JVM, и собирается выпускать целую линейку все более мощных Java-процессоров. Есть уже и Java-процессоры других фирм. Эти процессоры непосредственно выполняют байт-коды. Но при выполнении программ Java на других процессорах требуется еще интерпретация команд JVM в команды конкретного процессора, а значит, нужна программа-интерпретатор, причем для каждого типа процессоров, и для каждой архитектуры компьютера следует написать свой интерпретатор.

Эта задача уже решена практически для всех компьютерных платформ. На них реализованы виртуальные машины Java, а для наиболее распространенных платформ имеется несколько реализаций JVM разных фирм. Все больше операционных систем и систем управления базами данных включают реализацию JVM в свое ядро. Создана и специальная операционная система JavaOS, применяемая в электронных устройствах. В большинство браузеров встроена виртуальная машина Java для выполнения апплетов.

Кроме реализации JVM для выполнения байт-кодов на компьютере еще нужно иметь набор функций, вызываемых из байт-кодов и динамически компонующихся с байт-кодами. Этот набор оформляется в виде библиотеки классов Java, состоящей из одного или нескольких пакетов. Каждая функция может быть записана байт-кодами, но, поскольку она будет храниться на конкретном компьютере, ее можно записать прямо в системе команд этого компьютера, избегнув тем самым интерпретации байт-кодов. Такие функции называют "родными" методами. Применение "родных" методов ускоряет выполнение программы.

Фирма SUN Microsystems – создатель технологии Java – бесплатно распространяет набор необходимых программных инструментов для полного цикла работы с этим языком программирования: компиляции, интерпретации, отладки, включающий и богатую библиотеку классов, под названием JDK (Java Development Kit). Есть наборы инструментальных программ и других фирм. Например, большой популярностью пользуется JDK фирмы IBM.

1.2 Объектно-ориентированное программирование в Java

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

1.3 Принципы объектно-ориентированного программирования

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

1. Абстракция – Описание каждой модели производится в виде одного или нескольких классов. Класс можно считать проектом, слепком, чертежом, по которому затем будут создаваться конкретные объекты. Класс содержит описание переменных и констант, характеризующих объект. Они называются полями класса. Процедуры, описывающие поведение объекта, называются методами класса. Внутри класса можно описать и вложенные классы, и вложенные интерфейсы. Поля, методы и вложенные классы первого уровня являются членами класса (class members). Разные школы объектно-ориентированного программирования предлагают разные термины, мы используем терминологию, принятую в технологии Java.

2. Иерархия объектов.

3. Модульность – Этот принцип утверждает: каждый класс должен составлять отдельный модуль. Члены класса, к которым не планируется обращение извне, должны быть инкапсулированы.

4. Принцип KISS – Самый основной, базовый и самый великий принцип программирования. Принцип KISS – процесс и принцип проектирования, при котором простота системы декларируется в качестве основной цели и ценности.


Глава 2 Принципы построения графического интерфейса

Есть много различных графических систем: MS Windows, X Window System, Macintosh. В каждой из них свои правила построения окон и их компонентов: меню, полей ввода, кнопок, списков, полос прокрутки. Эти правила сложны и запутанны. Графические API содержат сотни функций.

Для облегчения создания окон и их компонентов написаны библиотеки классов: MFC, Motif, OpenLook, Qt, Tk, Xview, OpenWindows и множество других. Каждый класс такой библиотеки описывает сразу целый графический компонент, управляемый методами этого и других классов.

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

Библиотека классов Java, основанных на peer-интерфейсах, получила название AWT (Abstract Window Toolkit). При выводе объекта, созданного в приложении Java и основанного на peer-интерфейсе, на экран создается парный ему объект графической подсистемы операционной системы, который и отображается на экране. Эти объекты тесно взаимодействуют во время работы приложения. Поэтому графические объекты AWT в каждой графической среде имеют вид, характерный для этой среды: в MS Windows, Motif, OpenLook, OpenWindows, везде окна, созданные в AWT, выглядят как "родные" окна.

Именно из-за такой реализации peer-интерфейсов и других "родных" методов, написанных, главным образом, на языке C++, приходится для каждой платформы выпускать свой вариант JDK.

В версии JDK 1.1 библиотека AWT была переработана. В нее добавлена возможность создания компонентов, полностью написанных на Java и не зависящих от peer-интерфейсов. Такие компоненты стали называть "легкими" в отличие от компонентов, реализованных через peer-интерфейсы, названных "тяжелыми".

"Легкие" компоненты везде выглядят одинаково, сохраняют заданный при создании вид. Более того, приложение можно разработать таким образом, чтобы после его запуска можно было выбрать какой-то определенный вид: Motif, Metal, Windows 95 или какой-нибудь другой, и сменить этот вид в любой момент работы.

Эта интересная особенность "легких" компонентов получила название PL&F (Pluggable Look and Feel) или "plaf.

Была создана обширная библиотека "легких" компонентов Java, названная Swing. В ней были переписаны все компоненты библиотеки AWT, так что библиотека Swing может использоваться самостоятельно, несмотря на то, что все классы из нее расширяют классы библиотеки AWT.

Библиотека классов Swing поставлялась как дополнение к JDK 1.1. В состав Java 2 SDK она включена как основная графическая библиотека классов, реализующая идею "100% Pure Java", наряду с AWT.

В Java 2 библиотека AWT значительно расширена добавлением новых средств рисования, вывода текстов и изображений, получивших название Java 2D, и средств, реализующих перемещение текста методом DnD (Drag and Drop).

Кроме того, в Java 2 включены новые методы ввода/вывода Input Method Framework и средства связи с дополнительными устройствами ввода/вывода, такими как световое перо или клавиатура Бройля, названные Accessibility.

Все эти средства Java 2: AWT, Swing, Java 2D, DnD, Input Method Framework и Accessibility составили библиотеку графических средств Java, названную JFC (Java Foundation Classes).

Глава 3 Постановка задачи

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

Глава 4 Алгоритм работы


           
   
   
 
 
 


Глава 5 Описание классов, методов, переменных

Описание классов:

Программа состоит из нескольких основных классов:

Класс Main -в классе Main описываются параметры окна меню;

Класс Point- в классе Point описываются параметры окна и координаты точки, которые наследуют классы X0,X1,X2.

Класс X0- класс, наследующий координаты точки из класса Point, а так же выполняющий функцию прорисовки объекта Круг о унаследованным координатам.

Класс X1- класс, наследующий координаты точки из класса Point, а так же выполняющий функцию прорисовки объекта Квадрат о унаследованным координатам.

Класс X2- класс, наследующий координаты точки из класса Point, а так же выполняющий функцию прорисовки объекта Парабола о унаследованным координатам.

Класс X3- класс, наследующий координаты точки из класса X0, а так же выполняющий функцию прорисовки объекта Эллипс по унаследованным координатам.

Класс X4- класс, наследующий координаты точки из класса X1, а так же выполняющий функцию прорисовки объекта Прямоугольник по унаследованным координатам.

Класс X5- класс, наследующий координаты точки из класса X4, а так же выполняющий функцию прорисовки объекта Параллелограмм по унаследованным координатам.

Класс X6- класс, наследующий координаты точки из класса X5, а так же выполняющий функцию прорисовки объекта Ромб по унаследованным координатам.

Класс X7- класс, наследующий координаты точки из класса X2, а так же выполняющий функцию прорисовки объекта Гипербола по унаследованным координатам.

Описание методов:

В программе используется метод paint вызывающийся каждый раз, когда необходимо отобразить компонент на экране. Метод имеет один аргумент, тип которого абстрактный класс Graphics. В этом классе определено множество методов для отрисовки простейших графических элементов – линий, прямоугольников и многоугольников, окружностей и овалов, текста, картинок и т.д.

Наследники класса Component переопределяют метод paint и, пользуясь методами Graphics, задают алгоритм прорисовки своего внешнего вида.

drawLine(x1, y1, x2, y2) – Этот метод отображает линию толщиной в 1 пиксель, проходящую из точки (x1, y1) в (x2, y2).

drawRect(int x, int y, int width, int height) – Этот метод отображает прямоугольник, чей левый верхний угол находится в точке (x, y), а ширина и высота равняются width и height соответственно. Правая сторона пройдет по линии x+width, а нижняя – y+height.

fillRect(int x, int y, int width, int height) –Этот метод закрашивает прямоугольник. Левая и правая стороны прямоугольника проходят по линиям x и x+width-1 соответственно, а верхняя и нижняя – y и y+height-1 соответственно.

drawOval(int x, int y, int width, int height)­ – Этот метод рисует овал, вписанный в прямоугольник, задаваемый указанными параметрами. Очевидно, что если прямоугольник имеет равные стороны (т.е. является квадратом), овал становится окружностью.

fillOval(int x, int y, int width, int height) – Этот метод закрашивает указанный овал.

drawArc(int x, int y, width, height, startAngle, int arcAngle) – Этот метод рисует дугу – часть овала, задаваемого первыми четырьмя параметрами. Дуга начинается с угла startAngle и имеет угловой размер arcAngle. Начальный угол соответствует направлению часовой стрелки, указывающей на 3 часа. Угловой размер отсчитывается против часовой стрелки.

fillArc(int x, int y, width, height, startAngle, arcAngle) – Этот метод закрашивает сектор, ограниченный дугой, задаваемой параметрами.

drawString(String text, int x, int y) – Этот метод выводит на экран текст, задаваемый первым параметром. Точка (x, y) задает позицию самого левого символа.

Метод repaint.

Вызов paint инициируется операционной системой, если возникает необходимость перерисовать окно приложения, или часть его. Однако может потребоваться обновить внешний вид, руководствуясь программной логикой. Например, отобразить результат операции вычисления, или работы с сетью. Можно изменить состояние компонента (значение его полей), но операционная система не отследит такое изменение и не инициирует перерисовку.

Для программной инициализации перерисовки компонента служит метод repaint. Конечно, у него нет аргумента типа Graphics, поскольку программист не должен создавать экземпляры этого класса (точнее, его наследников, ведь Graphics – абстрактный класс). Метод repaint можно вызывать без аргументов

Описание переменных:

TextField tf, tf2, tf3, tf4- текстовые поля описывающие параметры фигуры;

float H,S,B- вещественные числа задающие цвет фигуры;

int h,s,x1,y1 – целочисленные преобразования значений текстовых полей;

int x,y – начало координат;

int x2,y2 –координаты верхнего левого угла квадраты;

;

Глава 6 Руководство пользователя

ЗАКЛЮЧЕНИЕ

В процессе написания данной работы были выяснены следующие свойства языка Java:

· язык программирования объектно-ориентирован, оснащён богатой

библиотекой классов и в то же время довольно прост для освоения;

· цикл разработки приложений сокращен за счет того, что система

построена на основе интерпретатора;

· приложение получается автоматически переносимым между множеством платформ и операционных систем;

· за счет встроенной системы сборки мусора программист освобождается

от необходимости явного управления памятью;

· приложение легко сопровождается и модифицируется, т.к. модули могут быть загружены с сети;

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Материалы интернет-сайтов:

Объектно-ориентированное программирование в Java.

http://www.realcoding.net/articles/glava-2-obektno-orientirovannoe-programmirovanie-v-java.html#1 – 09.05.2011

Фролов А. Программирование на Java: подробное руководство. http://ru.sun.com/java/books/online/index.jsp – 09.05.2011

Вязовик Н.А. Программирование на Java.

http://www.intuit.ru/department/pl/javapl/ – 09.05.2011

ППРИЛОЖЕНИЕ

package graphic;

import java.awt.*;

import javax.swing.Action.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

public class Main extends JFrame{

public static TextField tf;

public static TextField tf2;

public static TextField tf3;

public static TextField tf4;

Main()

{

}

Main(String s){

super(s);

setLayout(null);

setSize(250,480);

setVisible(true);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setResizable(false);

Button x0 = new Button("Круг");

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

x0.setBackground(Color.WHITE);

add(x0);

Button x1 = new Button("Квадрат");

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

x1.setBackground(Color.WHITE);

add(x1);

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

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

x2.setBackground(Color.WHITE);

add(x2);

Button x3 = new Button("Эллипс");

x3.setBounds(5, 170, 100, 25);

x3.setBackground(Color.WHITE);

add(x3);

Button x4 = new Button("Прямоугольник");

x4.setBounds(5, 220, 100, 25);

x4.setBackground(Color.WHITE);

add(x4);

Button x5 = new Button("Параллелограмм");

x5.setBounds(5, 270, 100, 25);

x5.setBackground(Color.WHITE);

add(x5);

Button x6 = new Button("Ромб");

x6.setBounds(5, 320, 100, 25);

x6.setBackground(Color.WHITE);

add(x6);

Button x7 = new Button("Гипербола");

x7.setBounds(5, 370, 100, 25);

x7.setBackground(Color.WHITE);

add(x7);

Button x8 = new Button("Выход");

x8.setBounds(5, 410, 235, 40);

x8.setBackground(Color.WHITE);

add(x8);

x8.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

Button x9 = new Button("Схема");

x9.setBounds(115, 370, 125, 25);

x9.setBackground(Color.WHITE);

add(x9);

tf=new TextField();

tf.setBounds(145, 30, 80, 25);

add(tf);

tf2=new TextField();

tf2.setBounds(145, 90, 80, 25);

add(tf2);

tf3=new TextField();

tf3.setBounds(145, 130, 80, 25);

add(tf3);

tf4=new TextField();

tf4.setBounds(145, 180, 80, 25);

add(tf4);

x0.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X0("Круг");

}

});

x1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X1("Квадрат");

}

});

x2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X2("Парабола");

}

});

x3.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X3("Эллипс");

}

});

x4.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X4("Прямоугольник");

}

});

x5.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X5("Параллелограмм");

}

});

x6.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X6("Ромб");

}

});

x7.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X7("Гипербола");

}

});

x9.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

new X8("Схема");

}

});

}

public static void main(String[] args) {

new Main("Программа");

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

String g="Введите угол:";

String f="Координаты ";

String d= "смещения";

String c= "Коофициент:";

String r= "X=";

String z= "Y=";

String k= "K=";

String u= "a=";

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 250, 480);

gr.setColor(Color.BLACK);

gr.drawString (g, 130, 49);

gr.drawString (f, 130, 99);

gr.drawString (d, 130, 109);

gr.drawString (c, 130, 199);

gr.drawString (r, 130, 129);

gr.drawString (z, 130, 170);

gr.drawString (k, 130, 216);

gr.drawString (u, 130, 66);

}}

class Point extends JFrame{

protected int x=350, y=350;

float H=50,S=1,B=30;

public Point(){

x =350; y=350;

}

Point(String s){

super(s);

setLayout(null);

setSize(800,700);

setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setResizable(false);

this.setLocation(255,0);

Button t1 = new Button("обновить");

t1.setBounds(703, 10, 90, 90);

add(t1);

t1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

repaint();

}

});

Button t2 = new Button("");

t2.setBounds(703, 110, 90, 90);

t2.setBackground(Color.BLACK);

add(t2);

t2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

H=0;

B=0;

S=0;

repaint();

}

});

Button t3 = new Button("");

t3.setBounds(703, 210, 90, 90);

t3.setBackground(Color.red);

add(t3);

t3.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

H=70;

B=20;

S=1;

repaint();

}

});

Button t4 = new Button("");

t4.setBounds(703, 310, 90, 90);

t4.setBackground(Color.GREEN);

add(t4);

t4.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

H= (float) 0.375;

S= (float) 0.711;

B= (float) 0.882;

repaint();

}

});

Button t5 = new Button("");

t5.setBounds(703, 410, 90, 90);

t5.setBackground(Color.BLUE);

add(t5);

t5.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent event){

H= (float) 0.575;

S= (float) 0.611;

B= (float) 0.682;

repaint();

}

});

Button x8 = new Button("Выход");

x8.setBounds(703, 510, 90, 90);

x8.setBackground(Color.WHITE);

add(x8);

x8.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

setVisible(false);

}

});

}

public Point(int x, int y){

this.x = x;

this.y = y;

}

}

class X0 extends Point{

X0(String s){

super(s);

}

private int getYValue() {

double D = 64 + 96;

return (int) (-8 + Math.sqrt(D) / 6);

}

private int getXValue() {

double D = 64 + 96;

return (int) (-8 + Math.sqrt(D) / 6);

}

public void paint(Graphics gr) {

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

int X = getXValue() * 30*s, Y = getYValue() * 30*s;

gr.fillOval(X+ x+x1, Y + y+y1, -2 * X, -2 * Y);

}

}

class X1 extends Point{

X1(String s){

super(s);

}

X1(int x, int y,int x2, int y2){

super(x, y);

}

int x2=x-150;

int y2=y-150;

X1(int x2, int y2){

this.x2 = x2;

this.y2 = y2;

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

gr.fillRect(x2-150*(s-1)+x1,y2-150*(s-1)+y1, 300*s, 300*s);

}

}

class X2 extends Point{

X2(String s){

super(s);

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

for(double i=0;i<700;i++){

y=-(int)(i*i/150/s)+350+y1;

gr.drawLine((int)i+350+x1, y, (int)i+350+x1, y);

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

}

}

}

class X3 extends X1{

X3(String s){

super(s);}

private int getYValue() {

double D = 16 + 96;

return (int) (-5 + Math.sqrt(D) / 6);

}

private int getXValue() {

double D = 8 + 96;

return (int) (-7 + Math.sqrt(D) / 6);

}

public void paint(Graphics gr) {

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

int X = getXValue() * 30*s, Y = getYValue() * 30*s;

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

gr.fillOval(x+ X+x1, y + Y+y1, -2 * X, -2 * Y);

}

}

class X4 extends X1{

X4(String s){

super(s);

}

X4(int x2, int y2,int x3, int y3){

super(x2, y2);}

int x3=x2;

int y3=y2+50;

void X4(int x3, int y3){

this.x3 = x3;

this.y3 = y3;

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

gr.fillRect(x3-150*(s-1)+x1,y3-100*(s-1)+y1, 300*s, 200*s);

}

}

class X5 extends X4{

X5(String s){

super(s);

}

public void X5(int x3,int y3,int xy1, int xy2,int xy3, int xy4,int yx1,int yx2,int yx3,int yx4) {

this.x3 = x3;

this.y3 = y3;

}

int xy1=x3;

int xy2=x3+50;

int xy3=x3+200;

int xy4=x3+250;

int yx1=y3+50;

int yx2=y3+150;

int yx3=y3+50;

int yx4=y3+150;

void X5(int xy1, int xy2,int xy3, int xy4,int yx1,int yx2,int yx3,int yx4){

this.xy1 = xy1;

this.xy2 = xy2;

this.xy3 = xy3;

this.xy4 = xy4;

this.yx1 = yx1;

this.yx2 = yx2;

this.yx3 = yx3;

this.yx4 = yx4;

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int y; int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(700, 0, 800, 700);

gr.fillRect(0, 0, 700, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

for(int j1=0;j1<250*s;j1++){

gr.drawLine(xy2+j1-100*(s-1)+x1, yx4+100*(s-1)+y1, xy1+j1-150*(s-1)+x1, yx1-100*(s-1)+y1);

}

}

}

class X6 extends X5{

X6(String s){

super(s);

}

public void X6(int xy1, int xy2,int xy3, int xy4,int yx1,int yx2,int yx3,int yx4) {

this.xy1 = xy1;

this.xy2 = xy2;

this.xy3 = xy3;

this.xy4 = xy4;

this.yx1 = yx1;

this.yx2 = yx2;

this.yx3 = yx3;

this.yx4 = yx4;

}

int rx1=xy1;

int rx2=xy2+100;

int rx3=xy3+100;

int rx4=xy4-100;

int ry1=yx1+50;

int ry2=yx2-200;

int ry3=yx3+200;

int ry4=yx4-50;

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(0, 0, 700, 700);

gr.fillRect(700, 0, 800, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

for(int i=0;i<150*s;i++){

gr.drawLine(rx2+x1-i, ry2-150*(s-1)+y1+i, rx3+150*(s-1)+x1-i, ry4+y1+i);

}

}

}

class X7 extends X2{

X7(String s){

super(s);

} public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

int j=0; int k=0;

gr.setColor(Color.WHITE);

gr.fillRect(700, 0, 800, 700);

gr.fillRect(0, 0, 700, 700);

gr.setColor(Color.lightGray);

while(j<700){

gr.drawLine(j, 0, j, 700);

j+=10;

}

while(k<700){

gr.drawLine(0, k, 700, k);

k+=10;

}

gr.setColor(Color.BLACK);

Main m=new Main();

int h=Integer.parseInt(m.tf.getText());

int x1=10*Integer.parseInt(m.tf2.getText());

int y1=10*Integer.parseInt(m.tf3.getText());

int s=5*Integer.parseInt(m.tf4.getText());

gr.drawLine(350, 0, 350, 700);

gr.drawLine(0, 350, 700, 350);

gr.drawString("0", 355, 365);

gr.setColor(Color.getHSBColor(H,S,B));

AffineTransform aft = AffineTransform.

getRotateInstance ((Math.PI/180)*h, 350+x1*s,350+y1*s);

g2d.setTransform (aft);

for(double i=0;i<700;i++){

int a=10;

int b=15;

gr.drawArc(350-b*s+x1,350-(b+2*a)*s+y1,2*b*s, 2*a*s, -25,-130);

gr.drawLine(350+(b-2)*s+x1,350-(2*a)*s+y1,350+(2*a*20-5)*s+x1, 350-(2*b*20)*s+y1);

gr.drawLine(350-(b-2)*s+x1,350-(2*a)*s+y1,350-(2*a*20-5)*s+x1, 350-(2*b*20)*s+y1);

gr.drawArc(350-b*s+x1,350+(b)*s+y1,2*b*s, 2*a*s, 25,130);

gr.drawLine(350+(b-2)*s+x1,350+(2*a)*s+y1,350+(2*a*20-5)*s+x1, 350+(2*b*20)*s+y1);

gr.drawLine(350-(b-2)*s+x1,350+(2*a)*s+y1,350-(2*a*20-5)*s+x1, 350+(2*b*20)*s+y1);

}

}

}

class X8 extends JFrame{

X8(String s){

super(s);

setLayout(null);

setSize(700,700);

setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setResizable(false);

this.setLocation(255,0);

Button x = new Button("Выход");

x.setBounds(503, 570, 180, 90);

x.setBackground(Color.WHITE);

add(x);

x.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

setVisible(false);

}

});

}

public void paint(Graphics gr){

Graphics2D g2d = (Graphics2D) gr;

Image img = Toolkit.getDefaultToolkit().getImage("Схема.png");

gr.drawImage(img, 0, 0, this);

}

}


Дата публикования: 2014-12-10; Прочитано: 279 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.156 с)...