Створення на мові програмування Java аплету, реалізуючого інтерфейс Gnumeric.org Gnumeric Spreadsheet

Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 13.06.2014
Размер файла 91,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

в) Третій метод знаходить суму чисел введених користувачем

Повертає ціле число.

Для знаходження суми чисел прибирає масив за допомоги циклу та сумує всі значення масиву після цього функція повертає це значення.

г) Четверта функція знаходить середнє арифметичне

Повертає число з плавучою крапкою.

Для знаходження середнього арифметичного функція викликає іншу функцію, яка знаходить суму усіх чисел, після чого результат ділить на кол-во елементів масиву та приводить це число до типу з плавучою точкою і на останок функція повертає результат (число з плавучою крапкою).

д) Остання п'ята функція знаходить ранг

Бере останній елемент масиву та віднімає від нього перший, а результат повертає. (масив відсортований)

Клас «DescriptiveStatisticsDialog»

Як і раніше слово «private» має на увазі що цей клас доступний лише класу, підкласом якого він є. Ключевое слово extends задает родительский класс новому создаваемому классу(JDialog). Цей клас використовується для створення діалогового вікна. Об'єкт цього вікна був оголошений ще на початку програми («DescriptiveStatisticsDialog dialog;»). Робота з об'єктом цього класу відбувається наступним чином: При натиснення на кнопку на панелі інстуменів («малюнок із зображення англійської літери «F»), або в меню вікна за шляхом: («Tools» - «Statistical analysis» - «Descriptive Statistics»).

При натисненні на одну з цих кнопок виконуються наступні дії:

Перш за все відбувається перевірка чи вперше використовується це вікно (if (dialog == null)) якщо ж ця інформація підтверджується то ініціалізується новий об'єкт цього класу. Після чого вже не зважаючи на цю умову у будь-якому випадку запускається метод цього класу («dialog. Input_Output_Range();»).

Опис безпосередньо класу:

Для того щоб реалізувати необхідне вікно, слід створити клас, похідний від класу JDialog («DescriptiveStatisticsDialog extends JDialog»). В Конструкторі даного класу треба вказати фрейм в якому воно повинне створюватись («public DescriptiveStatisticsDialog (JFrame owner)»). А вже в конструкторі треба описувати усі необхідні дії для створення інтерфейсу діалогового вікна. Першим кроком є надання параметрів діалогу, а саме власника, назву діалогового вікна, та помітити чи є воно модальним всі ці дії робить рядок:

super (owner, «Descriptive Statistics», true);

Завершуємо ввід параметрів введенням необхідних розмірів цього діалогового вікна («setSize (500, 300);»). Далі слід завантажити необхідні зображення для деяких кнопок в даному випадку для кнопок («Ok, Cancel, Help»). Що і роблять наступні рядки:

ImageIcon Ok = new ImageIcon («28.gif»);

ImageIcon Help = new ImageIcon («29.gif»);

ImageIcon Cansel = new ImageIcon («30.gif»);

Оскільки в класі використовуються вкладки слід свторити спеціальний компонент по роботі з ними:

JTabbedPane jtpD = new JTabbedPane (JTabbedPane.TOP);

після чого описаним вже методом задати його розміри. В діалозі використовуються три вкладки, як вже відмічав раніше для того щоб помістити на вкладку більше ніж один елемент треба скористатись елементом JPanel, який поміщується в цю вкладку, а в саму JPanel вже поміщуються всі необхідні елементи на цій вкладці. Оскільки вкладок три то і компоненті JPanel повинно бути три, їх я створюю за допомогою циклу. Потім по черзі починаю заповнювати ці вкладки, використовуючи для цього компоновку під назвою «Box».

Кожний рядок створюю окремо, для цього виконується ряд наступних дій:

а) Створюються всі необхідні компоненти такі як текстові поля(JTextField), метки (JLabel), кнопки та все інше, при необхідності групіруються (яким чино описував раніше).

б) При необхідності створюються обробники подій для елементів

в) Створюється горизонтальний блок, в який треба помістити всі елементи, для створення необхідних відстань між кнопками використовуються розпірки (в яких вказується на яку саме відстань треба відступити) та склейки які автоматично переходять в кінець рядка.

г) Після того як створили всі необхідні рядки які присутні на цій вкладці створюємо вертикальний блок в який поміщаємо всі горизонтальні блоки. Після цього цей вертикальний блок додаємо до відповідного цій вкладці елементу JPanel. И наостанок додаємо цю панель до вкладки, одночасно створюючи її та задаючи їй назву.

Всі вище перераховані дії слід виконувати для всіх необхідних вкладок.

Після цього створюю всі додаткові кнопки такі як («Ok, Cansel, Help»). До кожної з яких створюю свій обробник подій. При натисненні на кнопку («Ok») викликається метод: OutputDescriptiveStatistics(), та діалогове вікно стає невидимим. При натисненні на кнопку («Cansel»), робиться лише одна дія - вікно стає невидимим. Після цих дій всі три кнопки компонуються за допомоги компоновки під назвою («Box»). И на останок створюється вертикальний елемент компоновки «Box» в який поміщається об'єкт з вкладками, після чого робиться склейка, і додасться на останок горизонтальний рядок з кнопками, це робиться для того щоб всі ці три останні кнопки були доступні під час всієї роботи з діалоговим вікном. Після чого цей компонент додається до складу фрейму.

Але на цьому можливості класу не закінчуються також ще він має два метода:

а) «Input_Output_Range ()», Викликається ще при виклику діалогового вікна.

Його задачею є поміщення вибраних комір у текстові поля, які демонструють які елементи були вибрані. Та якщо елементів у рядку більше ніж один то він створює об'єкт класу який описувався раніше, слугуючий для обчислень та створення масиву чисел введених значень, одразу створюючи цей масив.

б) «OutputDescriptiveStatistics ()», створює об'єкт класу, призначений для

розрахунків, перевіряє чи вибрано умову при якій результат буде відображений у окремій вкладці, якщо це дійсно так то вказує що роботу треба проводити у таблиці під номером три, та додає вкладку з цією таблицею в головне вікно. И звичайно заповнює таблицю необхідними значеннями створюючи тестові поля з написом дії та викликаючи відповідні функції спец класу, які повертають необхідні результати та заносить їх у комірки.

2.3 Керівництво системного програміста

Загальні відомості

Програмне забезпечення вимагає для виконання Java runtime environment (JRE) або Java Development Kit (JDK) з javaw.exe. Якщо не встановлений маршрут для javaw.exe, з'явиться діалогове вікно з повідомленням про відсутність JRE/JDK. В JDK входять пакетні програми для компіляції вихідних текстів додатків Java, віртуальна машина, програма автоматизованого створення документації по класах, довідник по класах Java й інші необхідні засоби.

Таблиці Gnumeric є частиною середовища робочого столу GNOME: Проект по створенню вільної, зручної робочої середовища. Метою Gnumeric є створення найкращої таблиці. Gnumeric може читати файли, збережені при роботі з іншими таблицями, і при роботі з цією таблицею буде мінімум неприємностей щодо несумісності з іншими. Головними перевагами цієї таблиці є те що вона безкоштовна, швидка, точна. Вона спроможна створювати великі таблиці, дозволяючи користувачеві її редагувати вразі необхідності. Програма має багато функцій та інструментів які виділяють її з поміж інших своєю точністю. Gnumeric схожий на Microsoft Excel і функціональності цих редакторів приблизно однакова. Програма зможе розраховувати суми по стовпцям та рядкам, брати проценти, порахувати середнє арифметичне, дисперсію, в ній можливе використовування багатьох стандартних функцій - фінансових, математичних, логічних та статистичних. Для ведення домашньої бухгалтерії програма теж підходить. Оформлення таблиць можливе найрізноманітніше, можливо форматування комірок, як в доброму текстовому редакторі можливо змінювати шрифт, начертання, виділяти рядки стовпці, або незалежні комірки тексту кольором шрифту, фоновим кольором, рамочками, будувати по табличним даним графіки і діаграми, розміщати в таблиці зображення та безліч інших корисних речей.

Особливості запуску програми в Linux

Для цього нам знадобляться ресурси інтернету. Необхідні файли ми можемо отримати 2-мя способами: підключитися до репозиторію Дебиана non-free?, завантажити на свій комп'ютер наступні файли:

sun-java5-bin_1.5.0-10-3_i386.deb

sun-java5-jre_1.5.0-10-3_all.deb

sun-java5-plugin_1.5.0-10-3_i386.deb

Якщо є підключення до інтернету, и можливість завантажувати звідти пакети, то тоді вся установка виконується в 3 команди с консолі:

(виконуємо все від суперкористувача)

# echo deb http://ftp.debian.org/debian etch non-free >> /etc/apt/sources.list

# apt-get update

# apt-get install sun-java5-bin_1.5.0-10-3_i386.deb sun-java5-jre_1.5.0-10-3_all.deb sun-java5-plugin_1.5.0-10-3_i386.deb

Якщо ми отримали файли на комп'ютері (наприклад, в директорію /home/vasya/), тоді:

Попередньо слід встановити наступні пакети, (якщо вони вже є, то система вам просто про це повідомить та продовжить роботу):

#apt-get install unixodbc java-common

Далее устанавливаем java, предварительно зайдя в директорию с пакетами:

# cd /home/dmytro

# dpkg - i sun-java5-bin_1.5.0-10-3_i386.deb sun-java5-jre_1.5.0-10-3_all.deb sun-java5-plugin_1.5.0-10-3_i386.deb

Для java-программы мы в консоли, находясь в каталоге с этой программой выполняем (уже от пользователя):

$ javac - Gnumeric. java

$ java - Gnumeric. Java

Особливості запуску програми в FreeBSD

Спочатку треба також встановити java на FreeBSD дотримуючись підказок програми. Потім треба зайти до папки bin і помістити до неї файл програми. Відкомпілювати і запустити його.

Особливості запуску програми в Windows

Для запуску даної програми необхідно щоб була встановлена віртуальна машина Java, яка має назву JDK (Java Devolper's Kit) від фіми Sun. Ця програма не входить до стандартної комплектації операційної системи Windows, якщо ж ця програма в вас вже є - переходьте до кроку 2, якщо ж вона відсутня то треба зробити ряд наступних дій:

Крок 1: Оскільки дана програма вже присутня на цьому диску, то вам потрібно повернутись на головне меню диска (корінь), там ви побачите файл під назвою «jdk-6u25-windows-i586.exe».Натисніть на цей об'єкт правою кнопкою миші та виберіть в меню «Відкрити». Після цього слід вибрати місце слідуючи інструкціям в меню установки слід встановити дану програму.

Крок 2: Тепер слід вказати місце знаходження бібліотек та компілятора JDC. Для цього виконуємо наступні дії:

а) Натискаємо на кнопку в лівому нижньому кутку екрану, натискаючи на кнопку «Пуск»;

б) Потім натискаємо правою кнопкою миші на елемент під назвою «Комп'ютер»;

в) Вибираємо підменю під назвою «Свойства»;

г) У з'явившемуся вікні вибираємо підменю «Додаткові параметри системи»;

д) На вкладці «Додаткові вибираємо підменю «Змінні середи», у з'явившемуся вікні виконуємо наступні дії:

1) У вікні «Змінні середи користувача» вибираємо змінну «CLASSPATH» та натискаємо кнопку змінити, переходимо в кінець рядка значення змінної, ставимо спочатку знак»;», а після цього».». Якщо ж змінної «CLASSPATH» не має то замість кнопки «Змінити» натискаємо «Створити» в рядок ім'я змінної вводи CLASSPATH, а в рядок значення змінної ставимо».». Натискаємо «ОК».

2) У вікні «Системні змінні» знаходимо змінну «Path» та натискаємо змінити.

3) Переходимо в кінець рядка «Значення змінної» ставимо»;» та після цього вказуємо шлях до компілятора, якщо при установці JDK ви не вибирали інший шлях то вводимо рядок:

«C:\Program Files\Java\jdc.1.6.0_25\bin». Після цього натискаємо на кнопку «ОК».

е) Натискаємо на кнопку «OK».

Крок 3: Запуск програми виконуємо через командну строку («Пуск -> Всі програми -> Стандартні -> Командний рядок»)

Після виклику командної строки вказуємо шлях до директорії в якій лежить файл «Gnumeric.java». Для зручності можемо скопіювати папку Gnumeric з диску до папки з іменем користувача комп'ютера.

Якщо скопіювали папку за порадою то в командні строчці вводимо «cd Gnumeric».Натискаємо «Enter».

Після того як вказали шлях до файлу робимо наступні дії:

a) у консольному вікні вводимо «javac Gnumeric.java», натискаємо «Enter»;

б) у консольному вікні вводимо «java Gnumeric», натискаємо «Enter»;

Якщо ви всі вищеперераховані дії виконали правильно програма почне свою роботу.

3. Результати тестування програми

Програма перевірялася за допомоги Eclipse, та за допомоги стандартного компілятора від Java. Під час компіляції помилок та попереджень не виникало, всі компоненти завантажились без проблем. Під час тестування програма показала те, що від неї очікували, а саме було побудовано графічний інтерфейс. Зверху як і було задумано відображається меню, всі елементи впорядковані згідно їх приєднання до головного меню (JMenuBar), підменю з їх елементами також працюють та відображаються коректно, завантаження зображень відбулося вдало, а тому поряд з деякими елементами відображаються їх зображення. Мнемонічні кнопки теж працюють. Панель інструменті працює також добре, починаю з коректно відображеними зображення і закінчуючи вдалим присвоєнням командних імен (кнопки роблять події які повинні). Таблиця реалізована і працю згідно поставлених цілей, отже модель створена правильно, внесення даних в комірки відбувається коректно (перший рядок є недоступним для користувача), вкладки та панелі прокрутки працюють належним чином. Всі функції починаючи з зміни виду шрифту, розміру, начертання і закінчуючи відкриттям та закриттям діалогових вікон працюють. При виклику діалогу, який створен саме для виконання індивідуального завдання все також працює добре, текстові поля в яких вказується діапазон введених комірок теж працює правильно. Після того як відмів необхідні нам аспекти відображення результатів виконання та натиснення кнопки «Ok» в залежності від вибраних умов робиться коректний підрахунок мого індивідуального завдання. Отож в цілому інтерфейс вийшов схожий на поставлений прототип. Аплет швидко виконує команди, задачі, процедури. Витрачено мінімум системних ресурсів ПК при роботі з програмою.

Висновки

Мова програмування Java максимально спрощує процес програмування. Ця мова дозволяє легко, зручно та за невеликий інтервал часу написати надійну та швидкодіючу програму. При цьому Java виконує насправді важкі функції, мова йде про платформо-незалежні програми, динамічну зміну коду та навіть безпеку. Для створення безпосередньо аплетів є надзвичайно легкий та зручний елемент, його назва Swing. Ця віконна підсистема увібрала всі найкращі якості свого попередника (AWT), та додала декілька інноваційних введень, а саме легковагові компоненти та налаштовуванні стилі. Також Java добре підтримує національні абетки, оскільки розроблялася для інтернаціональної мережі Internet. Ця обставина теж є важливою рисою в умовах України. Таким чином Java дозволила достатньо легко за короткий проміжок часу побудувати інтерфейс програми Gnumeric, хоч він і дуже віддалений від оригіналу. При цьому при створені була задіяна дуже мала частина від можливостей Java swing. Звичайно Swing має свої переваги та недоліки, елементи користувацького інтерфейсу бібліотеки Swing виникають на екрані набагато повільніше, ніж компоненти, передбачені в бібліотеці AWT. Однак на сучасних машинах це практично неможливо замітити. З іншої сторони в бібліотеки Swing є декілька важливих переваг.

- Вона містить більше багатий і більш зручний набір елементів користувацького інтерфейсу

- Ця бібліотека набагато менше залежить від платформи, на якій буде виконуватись програма. Отже, вона містить менше помилок, характерних для окремої платформи.

- Бібліотека Swing дає можливість користувачам працювати на різних платформах.

Все це означає, що бібліотека Swing в кінці кінців дозволяє виконувати обіцяне компанії Sun: «Написано одного разу, працює всюди!».

Наступна перевага бібліотеки Swing може стати також і її недоліком: якщо елементи користувацького інтерфейсу на різних платформах виглядають однаково, то (на деяких платформах) вони будуть обов'язково відрізнятися від її власних компонентів, тобто користувачі будуть в них гірше розбиратися. В бібліотеці Swing і на цей аспект є елегантне рішення. Програмісти, які користуються бібліотекою Swing, можуть придати своїй програмі зовнішній вид в заданому стилі.

Отже, бібліотека Swing більш надійна, функціональна та незалежна, ніж бібліотека AWT. Крім того, її легше використовувати, ніж компоненти користувацького інтерфейсу із бібліотека AWT. Врахувавши все сказане раніше треба відмітити що Java є одним з найпотужніших мов програмування які існують у нас час, і хоч на початку він і був задуманий для інших цілей (з самого початку для приставок) після чого знайшов своє покликання для роботи в інтернеті, зараз використовується для великої кількості цілей, починаючи з програмування для інтернету (аплети) і закінчуючи незалежними Java - програмами.

Список використаної літератури

1. Баклан І.В. Основи програмування на Java - К.: НАУ 2007,244 с.

2. Bruce Eckel.» Thinking in Java».-4th ed. 2006.

3. Herbert Schildt,» Swing: Beginner's Guide»: McGraw-Hill/Osborne 2007.

4. http://www.oracle.com/javase/6/docs/api/index.html

5. http://www.oracle.com/javase/tutorial/

Додаток

Текст програми

import java.awt. BorderLayout;

import java.awt. Color;

import java.awt. Component;

import java.awt. Dimension;

import java.awt. Font;

import java.awt. GraphicsEnvironment;

import java.awt.event. ActionEvent;

import java.awt.event. ActionListener;

import java.awt.event. InputEvent;

import java.awt.event. KeyEvent;

import java.awt.print. PrinterJob;

import java.util. Arrays;

import javax.swing.*;

import javax.swing.event. ChangeEvent;

import javax.swing.event. ChangeListener;

import javax.swing.filechooser. FileNameExtensionFilter;

import javax.swing.table. AbstractTableModel;

import javax.swing.table. DefaultTableCellRenderer;

import javax.swing.table. TableColumn;

import javax.swing.border.*;

public class Gnumeric implements ActionListener {

String ccp; // copy cut paste buffer

/*Размер шрифта*/

int fontSize = 14;

JSpinner jspFontSize;

final PrinterJob printerJob = PrinterJob.getPrinterJob(); // работа с принтером

final JFileChooser chooser = new JFileChooser(); // файловые диалоги

FileNameExtensionFilter filter = new FileNameExtensionFilter («csv», «xls»); // файловый фильтр

/* Получение шрифтов */

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

String [] fonts = ge.getAvailableFontFamilyNames();

JComboBox fontBox;

String item;

/* Меню */

/*File*/

JMenuItem newAction;

JMenuItem openAction;

JMenuItem saveAsAction;

JMenuItem saveAction;

JMenuItem printAction;

JMenuItem exitAction;

/*Edit*/

JMenuItem undoAction;

JMenuItem redoAction;

JMenuItem copyAction;

JMenuItem cutAction;

JMenuItem pasteAction;

JMenuItem hyperAction;

/*Tools*/

JMenuItem Covariance;

/* Toolbar*/

JButton jbNew;

JButton jbOpen;

JButton jbSave;

JButton jbSaveAs;

JButton jbUndo;

JButton jbRedo;

JButton jbCopy;

JButton jbCut;

JButton jbPaste;

JButton jbPrint;

JButton jbBold;

JButton jbItalic;

JButton jbUnderLine;

/* Впомогательные */

JTable [] jtab = new JTable[4];

JTabbedPane jtp;

JScrollPane[] jsp = new JScrollPane[4];

/* Иконки */

ImageIcon newI = new ImageIcon («img/new.png»);

ImageIcon openI = new ImageIcon («img/open.png»);

ImageIcon saveI = new ImageIcon («img/save.png»);

ImageIcon saveAsI = new ImageIcon («img/save_as.png»);

ImageIcon printI = new ImageIcon («img/print.png»);

ImageIcon exitI = new ImageIcon («img/exit.png»);

ImageIcon undoI = new ImageIcon («img/undo.png»);

ImageIcon redoI = new ImageIcon («img/redo.png»);

ImageIcon copyI = new ImageIcon («img/copy.png»);

ImageIcon cutI = new ImageIcon («img/cut.png»);

ImageIcon pasteI = new ImageIcon («img/paste.png»);

ImageIcon hlI = new ImageIcon («img/hyper.png»);

ImageIcon boldI = new ImageIcon («img/bold.png»);

ImageIcon ulI = new ImageIcon («img/underline.png»);

ImageIcon italI = new ImageIcon («img/italic.png»);

ImageIcon okI = new ImageIcon («img/ok.png»);

ImageIcon helpI = new ImageIcon («img/help.png»);

ImageIcon cancelI = new ImageIcon («img/cancel.png»);

/* Covariance dialog */

CovarianceDialog dialog;

JTextField jtfRX;

JTextField jtfRY;

JTextField jtfOR;

public void init() {

JFrame frame = new JFrame («Gnumeric»);

frame.setSize (new Dimension (800, 600));

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

/* Меню */

JMenuBar menuBar = new JMenuBar();

JMenu jmFile = new JMenu («File»);

JMenu jmEdit = new JMenu («Edit»);

JMenu jmView = new JMenu («View»);

JMenu jmInsert = new JMenu («Insert»);

JMenu jmFormat = new JMenu («Format»);

JMenu jmTools = new JMenu («Tools»);

JMenu jmData = new JMenu («Data»);

JMenu jmHelp = new JMenu («Help»);

/*Мнемоники*/

jmFile.setMnemonic (KeyEvent.VK_F);

jmEdit.setMnemonic (KeyEvent.VK_E);

jmView.setMnemonic (KeyEvent.VK_V);

jmInsert.setMnemonic (KeyEvent.VK_I);

jmFormat.setMnemonic (KeyEvent.VK_R);

jmTools.setMnemonic (KeyEvent.VK_T);

jmData.setMnemonic (KeyEvent.VK_D);

jmHelp.setMnemonic (KeyEvent.VK_H);

/* Подменю * /

/* File */

/*Определение подменю кнопок*/

newAction = new JMenuItem (» New», newI);

openAction = new JMenuItem (» Open», openI);

saveAsAction = new JMenuItem (» Save As», saveAsI);

saveAction = new JMenuItem (» Save», saveI);

printAction = new JMenuItem (» Print», printI);

exitAction = new JMenuItem (» Exit», exitI);

newAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_N, InputEvent.CTRL_MASK));

openAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_O, InputEvent.CTRL_MASK));

saveAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S, InputEvent.CTRL_MASK));

printAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P, InputEvent.CTRL_MASK));

jmFile.add(newAction);

jmFile.add(openAction);

jmFile.addSeparator();

jmFile.add(saveAsAction);

jmFile.add(saveAction);

jmFile.addSeparator();

jmFile.add(printAction);

jmFile.addSeparator();

jmFile.add(exitAction);

newAction.addActionListener(this);

openAction.addActionListener(this);

saveAsAction.addActionListener(this);

saveAction.addActionListener(this);

printAction.addActionListener(this);

exitAction.addActionListener(this);

/* Edit */

undoAction = new JMenuItem (» Undo», undoI);

redoAction = new JMenuItem (» Redo», redoI);

copyAction = new JMenuItem (» Copy», copyI);

cutAction = new JMenuItem (» Cut», cutI);

pasteAction = new JMenuItem (» Paste», pasteI);

hyperAction = new JMenuItem (» Hyper Link.», hlI);

undoAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_Z, InputEvent.CTRL_MASK));

copyAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C, InputEvent.CTRL_MASK));

cutAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X, InputEvent.CTRL_MASK));

pasteAction.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_V, InputEvent.CTRL_MASK));

jmEdit.add(undoAction);

jmEdit.add(redoAction);

jmEdit.addSeparator();

jmEdit.add(copyAction);

jmEdit.add(cutAction);

jmEdit.add(pasteAction);

jmEdit.addSeparator();

jmEdit.add(hyperAction);

undoAction.addActionListener(this);

redoAction.addActionListener(this);

copyAction.addActionListener(this);

cutAction.addActionListener(this);

pasteAction.addActionListener(this);

hyperAction.addActionListener(this);

/* Инициализация менюбара*/

menuBar.add(jmFile);

menuBar.add(jmEdit);

menuBar.add(jmView);

menuBar.add(jmInsert);

menuBar.add(jmFormat);

menuBar.add(jmTools);

menuBar.add(jmData);

menuBar.add(jmHelp);

/*Tools*/

JMenu statAnalit = new JMenu («Statistical analysis»);

Covariance = new JMenuItem («Covariance»);

Covariance.addActionListener(this);

statAnalit.add(Covariance);

jmTools.add(statAnalit);

/* toolbar */

JToolBar jtob = new JToolBar();

jtob.setFloatable(false);

jbNew = new JButton(newI);

jbOpen = new JButton(openI);

jbSave = new JButton(saveI);

jbSaveAs = new JButton(saveAsI);

jbUndo = new JButton(undoI);

jbRedo = new JButton(redoI);

jbCopy = new JButton(copyI);

jbCut = new JButton(cutI);

jbPaste = new JButton(pasteI);

jbPrint = new JButton(printI);

jbBold = new JButton(boldI);

jbItalic = new JButton(italI);

jbUnderLine = new JButton(ulI);

jbNew.addActionListener(this);

jbOpen.addActionListener(this);

jbPrint.addActionListener(this);

jbSave.addActionListener(this);

jbSaveAs.addActionListener(this);

jbUndo.addActionListener(this);

jbRedo.addActionListener(this);

jbCopy.addActionListener(this);

jbCut.addActionListener(this);

jbPaste.addActionListener(this);

jbBold.addActionListener(this);

jbItalic.addActionListener(this);

jbUnderLine.addActionListener(this);

jtob.add(jbNew);

jtob.add(jbOpen);

jtob.add(jbPrint);

jtob.addSeparator();

jtob.add(jbSave);

jtob.add(jbSaveAs);

jtob.addSeparator();

jtob.add(jbCopy);

jtob.add(jbCut);

jtob.add(jbPaste);

jtob.addSeparator();

jtob.add(jbUndo);

jtob.add(jbRedo);

jtob.addSeparator();

/* Шрифты */

fontBox = new JComboBox(fonts);

fontBox.setPreferredSize (new Dimension (150, 20));

fontBox.setMaximumSize (new Dimension (150,20));

fontBox.addActionListener(this);

jtob.add(fontBox);

jtob.addSeparator();

/*размер текста*/

SpinnerNumberModel snm = new SpinnerNumberModel (fontSize, 1,30,1);

jspFontSize = new JSpinner(snm);

jspFontSize.setPreferredSize (new Dimension (60,20)); // предпочитаемый размер

jspFontSize.setMaximumSize (new Dimension (60,20)); // максимальный размер

jspFontSize.addChangeListener (new ChangeListener() {

public void stateChanged (ChangeEvent e) {

Integer bSize = (Integer) jspFontSize.getValue();

fontSize = bSize;

}

});

jtob.add(jspFontSize);

jtob.addSeparator();

jtob.add(jbBold); jbBold.addActionListener(this);

jtob.add(jbItalic); jbItalic.addActionListener(this);

jtob.add(jbUnderLine); jbUnderLine.addActionListener(this);

jtob.addSeparator();

/* Табличка */

for (int i = 0; i < 4; i++) {

jtab[i] = new JTable (new MarchModel (50,10));

TableColumn column = null;

column = jtab[i].getColumnModel().getColumn(0);

column.setPreferredWidth(20);

jtab[i].setGridColor (Color.BLACK);

jtab[i].setDefaultRenderer (jtab[i].getColumnClass(1), new DefaultTableCellRenderer() {

public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

super.setHorizontalAlignment (SwingConstants.CENTER);

super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);

return this;

}

});

jtab[i].setCellSelectionEnabled(true); // возможность выбора лишь оного елемента

jsp[i] = new JScrollPane (jtab[i]);

}

/* Вкладки */

jtp = new JTabbedPane (JTabbedPane.BOTTOM);

jtp.addTab («Sheet 1», jsp[0]);

jtp.addTab («Sheet 2», jsp[1]);

jtp.addTab («Sheet 3», jsp[2]);

frame.add(jtp);

frame.setJMenuBar(menuBar);

frame.add (jtob, BorderLayout.NORTH);

frame.add(jtp);

frame.setVisible(true);

}

/* Конструктор */

Gnumeric () {

init();

}

/* Подсчет коввариации */

private class S4et_Covariance {

int Q = jtp.getSelectedIndex();

int [] xCols = jtab[Q].getSelectedRows(); // получаем значения Х

int [] yCols = jtab[Q].getSelectedRows(); // получаем значения У

double Covariation = 0;

public double GetCovariation() {

double sumX = 0;

double sumY = 0;

int n = xCols.length;

double sredX;

double sredY;

double sigma = 0; // сумма

/* Проверка на правильность ввода */

if (xCols.length!= yCols.length) {

Cov_err dlog = null;

if (dlog == null) {

dlog = new Cov_err (Gnumeric.this);

}

} else {

for(int i = 0; i < xCols.length; i++) {

sumX += xCols[i];

sumY += yCols[i];

}

sredX = sumX/xCols.length;

sredY = sumY/yCols.length;

for (int i = 1; i <= xCols.length -1; i++) {

sigma += (xCols[i] - sredX) * (yCols[i] - sredY);

}

Covariation += sigma/(n - 1);

}

return Covariation;

}

}

/*Covariance dialog*/

private class CovarianceDialog extends JDialog {

private static final long serialVersionUID = 1L;

public CovarianceDialog (Gnumeric gnumeric) {

setSize (500, 300);

JTabbedPane jtpCD = new JTabbedPane (JTabbedPane.TOP);

jtpCD.setSize (500, 200);

JPanel panel = new JPanel();

JLabel jlRX = new JLabel («Input Range X:»);

jtfRX = new JTextField (10);

jtfRX.setMaximumSize (jtfRX.getMaximumSize());

JLabel jlRY = new JLabel («Input Range Y:»);

jtfRY = new JTextField (10);

jtfRY.setMaximumSize (jtfRY.getMaximumSize());

JLabel jlOR = new JLabel («Output Range:»);

jtfOR = new JTextField(10);

Box hBoxIn1 = Box.createHorizontalBox();

hBoxIn1.add(jlRX);

hBoxIn1.add (Box.createHorizontalStrut(3));

hBoxIn1.add(jtfRX);

Box hBoxIn2 = Box.createHorizontalBox();

hBoxIn2.add(jlRY);

hBoxIn2.add (Box.createHorizontalStrut(3));

hBoxIn2.add(jtfRY);

Box hBoxOr1 = Box.createHorizontalBox();

hBoxOr1.add(jlOR);

hBoxOr1.add (Box.createHorizontalStrut(3));

hBoxOr1.add(jtfOR);

Box vBoxIn = Box.createVerticalBox();

vBoxIn.add(hBoxIn1);

vBoxIn.add(hBoxIn2);

vBoxIn.add (Box.createVerticalStrut(15));

vBoxIn.add(hBoxOr1);

panel.add (vBoxIn, BorderLayout.CENTER);

jtpCD.addTab («Covariance», panel);

/* Кнопки для всех груп */

/* OK */

JButton jbOk = new JButton («Ok!», okI);

jbOk.addActionListener (new ActionListener() {

public void actionPerformed (ActionEvent e) {

int Q = jtp.getSelectedIndex();

S4et_Covariance EnteredElements = new S4et_Covariance();

EnteredElements. GetCovariation();

jtab [EnteredElements.Q].setValueAt («Covariation:», 1, 1);

jtab [EnteredElements.Q].setValueAt((double) (EnteredElements. GetCovariation()), 1, 3);

}

});

/* Cancel */

JButton jbCancl = new JButton («Cancel», cancelI);

jbCancl.addActionListener (new ActionListener() {

public void actionPerformed (ActionEvent e) {

setVisible(false);

}

});

/* Help */

JButton jbHelp = new JButton («Help», helpI);

jbHelp.addActionListener (new ActionListener() {

public void actionPerformed (ActionEvent e) {

}

});

Box hBoxButtons = Box.createHorizontalBox();

hBoxButtons.add(jbHelp);

hBoxButtons.add (Box.createGlue());

hBoxButtons.add(jbCancl);

hBoxButtons.add (Box.createHorizontalStrut(1));

hBoxButtons.add(jbOk);

hBoxButtons.add (Box.createHorizontalStrut(15));

Box vBoxButtons = Box.createVerticalBox();

vBoxButtons.add(jtpCD);

vBoxButtons.add(hBoxButtons);

add(vBoxButtons);

}

protected void Input_Output_Range () {

int Q = jtp.getSelectedIndex();

if (-1 == jtab[Q].getSelectedColumn()) {

jtfRX.setText («Sheet» + (jtp.getSelectedIndex()+1) +»!» + «A1»);

jtfRY.setText («Sheet» + (jtp.getSelectedIndex()+1) +»!» + «A1»);

jtfOR.setText («Sheet» + (jtp.getSelectedIndex()+1) +»!» + «A1»);

}

else {

S4et_Covariance EnteredElements = new S4et_Covariance();

EnteredElements. GetCovariation();

jtfRX.setText («Sheet» + (jtp.getSelectedIndex()+1)+»!» + jtab[Q].getColumnName (jtab[Q].getSelectedColumn()) + (jtab[Q].getSelectedRow()+1));

jtfRY.setText («Sheet» + (jtp.getSelectedIndex()+1)+»!» + jtab[Q].getColumnName (jtab[Q].getSelectedColumn()) + (jtab[Q].getSelectedRow()+1));

jtfOR.setText («Sheet» + (jtp.getSelectedIndex()+1)+»!» + jtab[Q].getColumnName (jtab[Q].getSelectedColumn()) + (jtab[Q].getSelectedRow()+1));

}

}

}

/* Action */

public void actionPerformed (final ActionEvent ae) {

int Q = jtp.getSelectedIndex();

final int row;

final int col;

/*Covariance dialog*/

if (ae.getSource()!= null && ae.getSource().equals(Covariance)) {

if (dialog == null) {

dialog = new CovarianceDialog (Gnumeric.this);

dialog. Input_Output_Range();

dialog.setVisible(true);

} else {dialog.setVisible(true);}

}

/* Menu

* File

* New */

if (ae.getSource()!= null && (ae.getSource().equals(jbNew) || ae.getSource().equals(newAction))) {

System.out.print («New»);

}

//Open

if (ae.getSource()!= null && (ae.getSource().equals(jbOpen) || ae.getSource().equals(openAction))) {

chooser.setFileFilter(filter);

int returnVal = chooser.showOpenDialog(chooser);

if (returnVal == JFileChooser.APPROVE_OPTION) {

}

}

//Save As

if (ae.getSource()!= null && (ae.getSource().equals(jbSaveAs) || ae.getSource().equals(saveAsAction))) {

chooser.setFileFilter(filter);

int returnVal = chooser.showSaveDialog(chooser);

if (returnVal == JFileChooser.APPROVE_OPTION) {

}

}

//Save

if (ae.getSource()!= null && (ae.getSource().equals(jbSave) || ae.getSource().equals(saveAction))) {

}

//Print

if (ae.getSource()!= null && (ae.getSource().equals(printAction) || ae.getSource().equals(jbPrint))) {

if (printerJob.printDialog()) {

}

}

//Exit

if (ae.getSource()!= null && (ae.getSource().equals(exitAction))) {

System.exit(0);

}

/* Edit */

//undo

if (ae.getSource()!= null && (ae.getSource().equals(undoAction) || ae.getSource().equals(jbUndo))) {

}

//redo

if (ae.getSource()!= null && (ae.getSource().equals(redoAction) || ae.getSource().equals(jbRedo))) {

}

//copy

if (ae.getSource()!= null && (ae.getSource().equals(copyAction) || ae.getSource().equals(jbCopy))) {

}

//cut

if (ae.getSource()!= null && (ae.getSource().equals(cutAction) || ae.getSource().equals(jbCut))) {

}

//paste

if (ae.getSource()!= null && (ae.getSource().equals(pasteAction) || ae.getSource().equals(jbPaste))) {

}

//hyper link

if (ae.getSource()!= null && ae.getSource().equals(hyperAction)) {

}

/* Формат текста

* ЖКЧ

* Сам текст */

if (ae.getActionCommand().equals(fontBox)) {

item = (String) fontBox.getSelectedItem();

}

//bold

if (ae.getSource()!= null && ae.getSource().equals(jbBold)) {

jtab[Q].setFont (new Font (item, Font.BOLD, fontSize));

}

//Italic

if (ae.getSource()!=null && ae.getSource().equals(jbItalic)) {

jtab[Q].setFont (new Font (item, Font.ITALIC, fontSize));

}

//underlined

if (ae.getSource()!= null && ae.getSource().equals(jbUnderLine)) {

jtab[Q].setFont (new Font (item, Font.PLAIN, fontSize));

}

}

public static void main (String [] args) {

SwingUtilities.invokeLater (new Runnable() {

public void run() {

new Gnumeric();

}

});

}

}

class MarchModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;

int numRows;

int numCols;

String [] colNames;

Object[][] data;

MarchModel (int len, int cols) {

super();

numRows = len;

numCols = cols;

colNames = new String[cols];

for (int i = 0; i < cols; i++) {

if (i == 0) colNames[i] = «#»;

else {

int a = i-1+'A';

char [] b= new char [1];

b[0] = (char) a;

colNames[i] = new String(b);

}

}

data = new Object[len] [cols];

for (int i = 0; i < len; i ++)

for (int j = 0; j < cols; j++) {

if (j == 0) data[i] [j] = i+1;

else data[i] [j] = «»;

}

}

public int getRowCount() {return numRows;}

public int getColumnCount() {return numCols;}

public String getColumnName (int c) {return colNames[c];}

public Object getValueAt (int r, int c) {return data[r] [c];}

public boolean isCellEditable (int r, int c) {

if (c!=0) {return true;}

return false;

}

public void setValueAt (Object obj, int r, int c) {

data[r] [c] = obj;

fireTableCellUpdated (r, c);

}

}

Размещено на Allbest.ru


Подобные документы

  • Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.

    курсовая работа [762,8 K], добавлен 03.05.2015

  • Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.

    дипломная работа [608,3 K], добавлен 26.10.2010

  • Основні розрахунки резисторів мікросхеми. Розробка алгоритму рішення задачі методом блок-схем. Характеристика та розробка програми на мові С++ з використанням принципів модульного і структурного програмування. План тестування і налагоджування програми.

    курсовая работа [2,9 M], добавлен 05.12.2012

  • Характеристика предметної області: FTP-server для ОС Windows. Шляхи встановлення FTP-серверу в ОС Windows. Опис мови та середовища програмування, компонентів та функцій програми. Аналіз реалізованої програми FTP-клієнта. Тестовий запуск та опис програми.

    курсовая работа [1,7 M], добавлен 22.06.2017

  • Розробка алгоритму роботи програми, її загальна характеристика та функціональні особливості, умови ефективного використання. Способи виклику та адреса завантаження, відомості про використання оперативної пам'яті. Посібник системного програміста.

    курсовая работа [182,6 K], добавлен 07.06.2016

  • Відомості про мови програмування та методи програмування. Системні вимоги програми. Керівництво програміста та керівництво користувача. Використання консольного додатку візуального середовища Visual Studio 2010. Запуск програми "Толковый словарь".

    курсовая работа [791,1 K], добавлен 18.01.2015

  • Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.

    курсовая работа [460,9 K], добавлен 04.03.2014

  • Розробка та тестування додатків, які базуються на елементах мови програмування Java, принципи програмування в її середовищі. Вивчення переваг Java-платформи, прикладний програмний інтерфейс та особливості сучасних засобів створення Java-додатків.

    дипломная работа [2,8 M], добавлен 22.06.2011

  • Перелік та призначення режимів та структура діалогу. Опис компонентів програми і створення проекту, вимоги до її структури, функціональні особливості та оцінка можливостей. Загальна характеристика розробленої програми, її лістинг та аналіз ефективності.

    курсовая работа [380,5 K], добавлен 01.04.2016

  • Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.

    курсовая работа [510,2 K], добавлен 03.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.