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

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

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

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

КУРСОВИЙ ПРОЕКТ

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

Вступ

алгоритм програма windows

Задачу було реалізовано засобами об'єктно-орієнтованої мови Java, інтерфейс програми Gnumeric. Таблиці Gnumeric є частиною середовища робочого столу GNOME: Проект по створенню вільної, зручної робочої середовища. Побудована об'єктна модель та здійснення реалізація відповідного застосування та аплету. Під час створення роботи були вивчені аспекти створення контекстного меню, підменю, створення спливаючих розділів, діалогових вікон, кнопок різного призначення, визначена сфера застосування програми. Були поглиблені теоретичні знання з Java, а також з дисциплін об'єктно-орієнтованого програмування, основ редакторів по роботі з таблицями. Мова Java сильно вплинула і навіть змінила обличчя Internet, розширивши спектр об'єктів, які можуть розповсюджуватись у Internet-просторі. Програми нової форми - аплети - завантажуються з віддаленого сервера і можуть запускатися динамічно, без участі користувача. До появи Java такий підхід був неприпустимий з міркувань безпеки. В архітектурі аплетів зроблено ряд штучних обмежень, які роблять їх цілком безпечними. Перш за все, Java є інтерпретованою мовою і простір ресурсів Java-програми обмежений так званою віртуальною Java-машиною (VJM). JVM - це Java Virtual Machine, віртуальна машина Java, інтерпретуюча байт-код, описуваний в class - файлах. Її застосування необхідно для забезпечення кросс - платформенності, а також для безпеки, однак створює деякі проблеми в питанні продуктивності, вона може контролювати поведінку програми і захищати систему від побічних ефектів, які можуть виникати з вини аплета. Аплети - це програми, працюючі у середі іншої програми - браузера. Вони не потребують вікно вищого рівня - ним служить вікно браузера. Вони не запускаються JVM - їх завантажує браузер, який сам запускає JVM для виконання аплету. Ці особливості відображаються на написанні програми. Аплети дозволяють виконувати складну локальну обробку даних, отриманих від сервера Web або введених користувачем із клавіатури. З міркувань безпеки аплети (на відміну від звичайних додатків Java) не мають ніякого доступу до файлової системи локального комп'ютера. Для підвищення продуктивності додатків Java у сучасних браузерах використається компіляція «на лету» - Just-In-Time compilation (JIT). При першому завантаженні аплета його код транслюється у звичайну здійсненну програму, що зберігається на диску й запускається. У результаті загальна швидкість виконання аплета Java збільшується в кілька разів. У Java синтаксис близький до синтаксису мови C++. Успадкувавши найкраще від мови програмування C++, мова Java при цьому позбулася деяких недоліків C++, у результаті чого на ній стало простіше програмувати. У цій мові нема, наприклад, покажчиків, які складні у використанні й потенційно можуть послужити причиною доступу програми до не приналежній їй області пам'яті. Немає множинного спадкування й шаблонів, хоча функціональні можливості мови Java від цього не постраждали. В результаті був сформований ясний і прагматичний підхід до об'єктів. Вільно переймаючи ідеї, які реалізовувалися протягом останніх десятиріч, мові Java вдалося знайти рівновагу між парадигмою «все є об'єктом» і прагматичним підходом. Об'єктна модель Java проста і легко розширюється, в той час як просі типи, як цілі, зберігаються як дані, що не є об'єктами, що дозволяє значно підвищити швидкість при їх обробці. Java дозволяє створювати незалежні від платформи програми шляхом компіляції в проміжне представлення, яке називається байт кодом. Багато попередніх спроб знати розв'язок проблеми незалежності від платформи були зроблені за рахунок продуктивності. Крім того в Java наявний засіб передачі повідомлень в межах внутрішнього адресного простору. Це дозволяє забезпечити віддалене виконання процедур. Ці інтерфейси включені у пакет RMI (Remote Method Invocation).

1. Постановка задачі

На мові програмування Java створити аплет, який моделює інтерфейс та роботу програмної системи Gnumeric Spreadsheet (http // :www.gnumeric.org). З функціями роботи з клітинами електронної таблиці до яких входять: вибір шрифту, його розмір та його начертання (жирний, курсив, звичайний). Додатково реалізуються елементи меню «Сервіс» - «Статистичний аналіз» - «Описові статистики «(«Tools» - «Statistical analysis» - «Descriptive Statistics»). Вивчити аспекти виконання методів, використання класів та роботи з об'єктами, визначити сферу застосування даної мови програмування. Зробити вибір методів та інструментальних засобів для здійснення необхідних функцій та виклику процедур. Поглибити теоретичні знання з багатьох дисциплін, отримати практичні навички роботи з Java. Детальніше про індивідуальне завдання:

Описова статистика (Descriptive statistics) - один з розділів статистичної науки, в рамках якого вивчаються методи опису і представлення основних властивостей даних. Дозволяє узагальнювати первинні результати, отримані при спостереженні або в експерименті. Застосування описової статистики включає наступні етапи:

а) Збір даних

б) Категоризація даних

в) Узагальнення даних

г) Представлення даних

Для більш глибоких висновків про природу аналізованих даних використовується індуктивна статистика.У рамках описової статистики застосовуються такі найпростіші техніки:

а) Графічне представлення даних.

б) Табличне представлення даних.

в) Використання узагальнюючих статистик, таких як ранг, медіана, дисперсія і т.д. Узагальнюючі статистики використовуються для вирішення двох основних завдань:

1) Показати загальне в характері сукупності даних.2) Показати, у чому і наскільки дані різні.

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

Дана програма здатна вираховувати:

а) Середнє арифметичне;

б) Медіану;

в) Мінімальне значення;

г) Максимальне значення;

д) Суму;

е) Ранг.

Середнім арифметичним числа є частка від ділення суми цих чисел на їх кількість;

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

Мінімальним значенням є найменше число із всіх введених користувачем.

Максимальне значення є найбільше число із всіх введених користувачем.

Сума - сума всіх чисел введених користувачем.

Ранг - різниця між найбільшим та найменшим числом, введеним користувачем.

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

Чому саме Gnumeric Spreadsheet?

Програмна система Gnumeric Spreadsheet є безкоштовною, доступною для загального огляду програми, котра за своїми функціями дуже схожа на всесвітньо відому програму по роботі з таблицями та розрахунками Excel, котра входить до складу пакету Microsoft office. Gnumeric Spreadsheet дає великі можливості для роботи з таблицями та розрахунків за допомоги них, опанувавши принципи роботи Gnumeric Spreadsheet, ви з легкістю зможете користуватися і Excel.

2. Розробка програми

2.1 Опис алгоритму

Програма реалізована в середовищі Java, за прототип було взято програмну систему Gnumeric Spreadsheet (http // :www.gnumeric.org). Для реалізація було залучено такі бібліотеки:

а) import javax.swing.*;

б) import javax.swing.event.*;

в) import java.awt.*;

г) import java.awt.event.*;

Класи, які надають всі компоненти Swing містяться в пакеті java.swing.*, модифікатори містяться в пакеті java.awt.*, методи які дозволяють отримувати та оброблювати події, входять в інтерфейси, які містяться в пакетах javax.swing.event.*, java.awt.event.*;.Всі використані класи продемонстровано у таблиці 2.1 «Використані класи».

Таблиця 2.1 «Використані класи»

JSpinner

JButton

JTable

JFileChooser

JToggleButton

JTabbedPane

JComboBox

JScrollPane

JMenuBar

Integer

JMenu

ButtonGroup

JMenuItem

Font

JApplet

JToolBar

JSeparator

JDialog

2.2 Опис програми

Розглянемо детальніше блоки програми та функції, які вони виконують.

Розпочнемо з перших рядків програми:

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table. AbstractTableModel;

import javax.swing.table. DefaultTableCellRenderer;

import javax.swing.table. TableColumn;

import java.awt.*;

import java.awt.event.*;

import java.util. Arrays;

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

В бібліотеці «javax.swing» знаходяться майже всі компоненти які ми використовуємо, мова йде про кнопки (JButton, JToggleButton), інкрементний регулятор (JSpinner), таблицю (JTable), компоненти списку (JComboBox), компоненти створення головного меню програми (JMenuBar), компоненти реалізації контекстного меню (JMenu, JMenuItem), для створення аплету який використовує компоненти swing (JApplet), компонент для розділу пунктів меню (JSeparator), діалогове вікно (JFileChooser), вкладки (JTabbedPane), компонент для реалізації користувацького графічного інтерфейсу (JScrollPane), та компоненти панелі інструментів (JToolBar), діалогове вікно, яке використовується підчас індивідуального завдання (JDialog).

В бібліотеках «javax.swing.event», «java.awt.event» знаходяться методи які дозволяють отримувати та оброблювати події. Бібліотека «java.util. Arrays» вміщує в себе функції по роботі з масивом (знадобиться під час сортування масиву в індивідуальному завданні). Всі інші слугують як помічники для реалізації, одного з головних класів - таблиці.

Після оголошення бібліотек йде оголошення класу, «public class Gnumeric extends JFrame implements ActionListener» це головний клас (який вступає в прямий контакт с користувачем), до якого має змогу звернутись користувач, він повинен бути оголошений як public, далі йде назва класу, ключове слово «extends» задає батьківський клас новому створюваному класу(JFrame) можемо для реалізації використовувати компоненти Swing, «implements ActionListener» дає змогу зрозуміти що клас реалізує інтерфейс ActionListener (подія дії (событие действия)).

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

- В рядку «String [] Tomb = {«Dialog», «Serif», «Times New Roman», «Cambria», «monospaced»};» оголошено масив рядків, в якому йде перелік назв шрифтів.

- В змінній «int fontSize = 14» вказується початковий розмір шрифту, у подальшому, при примсі користувача розмір шрифту може змінюватись, а отже і значення в цій змінній.

- Змінна «String item» буде зберігати вибраний користувачем шрифт (жирний, курсив, звичайний).

- Зміна «String CopyPaste» зберігає значення комірки, значення якої ми прагнемо скопіювати, або вирізати.

- Також тут оголошено два масиви посилань в динамічній пам'яті для таблиць (по чотири, оскільки програма має чотири незалежні таблиці в чотирьох вкладках (одна з яких для індивідуального завдання)), «JTable [] jtab = new JTable [4]» створює безпосередньо посилання на таблицю, а «JScrollPane [] jscrlp = new JScrollPane[4]» слугує для створення полос прокрутки для цих таблиць (шляхом вставлення таблиці в панель).

- В масиві змінних під назвою «ImageIcon imgs[]», в цьому масиві будуть зберігатися завантажені зображення.

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

Після оголошення змінних описується конструктор «public Gnumeric()» в якому відбувається виклик функції «initialization()» в якій вже безпосередньо виконується ініціалізація програми. Першим кроком на шляху ініціалізації програми є встановлення розмірів вікна при старті програми в пікселях. Саме це і відбувається в рядку «setSize (900,600)». Після чого описується яку дію необхідно виконати при закритті програми, в даному випадку програма завершає своє виконання на що вказує рядок: «setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)». Потім відбувається ініціалізація змінних які містять зображення, завантаження та присвоєння цим змінним. Все це відбувається у рядках:

ImageIcon[] innerImgs = new ImageIcon[27];

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

innerImgs[i] = new ImageIcon((i + 1) +».gif»);

}

У подальшому ці змінні буду використовувати при створенні елементів до яких треба підставити зображення.

Потім створюється головне меню програми «JMenuBar jmb = new JMenuBar()», яке завжди буде на виду, під час ходу виконання всієї програми. JMenuBar є своєрідний контейнер для меню. Подібно іншим компонентам він є підкласом класу JComponent, для данного классу є лише один конструктор, по умовчанню. Такий новий рядок меню порожній, і перед використанням треба заповнити конкретними пунктами. В програмі може бути лише один рядок меню. В класі JMenuBar визначено декілька методів, при створенні програми знадобиться лише один з них - add(), цей метод зв'язує з рядком меню об'єкт JMenu(підменю).

Наступним кроком буде створення компонентів реалізації підменю, на сам перед мова йде про створення підрозділів, нижче наведено перелік підрозділів:

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»);

Для кожного з цих підрозділів виконані наступні дії:

а) Задано мнемонічні клавіші,

Продемонструємо їх налаштування на прикладі підменю («File»):

«jmFile.setMnemonic (KeyEvent.VK_F)»

як бачимо з рядка вище для налаштування мнемонічних клавіш використовуються метод «setMnemonic» завдяки команді «KeyEvent.VK_F» задається клавіша «F».Тепер якщо натиснути клавішу «alt» то під написом File буде підкреслено клавішу при натисненні на яку, при умові зажатої клавіші alt буде виконуватись вибір підрозділу, в цьому випадку при комбінації «alt + F» генерується натиснення кнопки («File»), виклик проходить без обліку регістра.

Аналогічні дію будуть виконуватись для всіх підрозділів.

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

JMenu інкапсулює меню, котре заповнюється пунктами, реалізованими за допомогою об'єктів JMenuItem. Клас JMenu є дочірнім по відношенню до класу JMenuItem. Це означає, що є можливість зв'язувати з іншим об'єктом того ж типу, можливо створювати підменю в составі меню. При створенні програми знадобиться один метод і для JMenu - add(), цей метод зв'язує з підменю об'єкт JMenuItem або ще JMenu(підменю). Для деяких елементів JMenuItem створені також зображення які відображаються зліва від імені елемента. Отже, при створенні кожний елемент JMenuItem має своє ім'я яке зображене в дужках, а деякі і зображення, змінна в якій зберігається зображення розміщується з права від імені.

Перелік створених елементів для кожного з підменю, продемонстровано нижче.

Опис підменю під назвою «jmFile»:

Елементи підменю «jmFile» зображені у таблиці 2.2 «JMenu jmFile («File»)».

Таблиця 2.2 «JMenu jmFile («File»)»

Елемент

(JMenuItem)

JMenuItem jmiNew = new JMenuItem («New», innerImgs[14]);

JMenuItem jmiOpen = new JMenuItem («Open», innerImgs[17]);

JMenuItem jmiClose = new JMenuItem («Close»);

JMenuItem jmiSave = new JMenuItem («Save», innerImgs[23]);

JMenuItem jmiSaveAs = new JMenuItem («Save as», innerImgs[23]);

JMenuItem jmiSaveWP = new JMenuItem («Save as Web Page», innerImgs[24]);

JMenuItem jmiSaveWS = new JMenuItem («Save workspace»);

JMenuItem jmiSaveSearch = new JMenuItem («File search», innerImgs[25]);

JMenuItem jmiPrev = new JMenuItem («Preview Page»);

JMenuItem jmiPrint = new JMenuItem («Print», innerImgs[20]);

JMenuItem jmiExit = new JMenuItem («Exit», KeyEvent.VK_E);

Для деяких елементів створено обробники подій, тобто при натисненні на вибраний компонент відбувається подія. В інтерфейсі ActionListener є метод, який викликається лише тоді, коли користувач натискає на кнопці, або виконує іншу дію яка впливає на цей компонент. Ця подія може бути опрацьована будь-яким об'єктом, при умові, що він реалізую інтерфейс ActionListener. Зв'язування кнопки з обробником відбувається наступним чином, нижче приведені два способи реалізації:

а) Для кожної дії можливо визначити окремий обробник, таким чином різні класи будуть підтримувати різні події, тобто реалізовувати обробник подій за допомогою неіменованих внутрішніх класів (обробляти подію одразу при зв'язуванні клавіші з обробником події, такий метод використовують, коли для реалізації даної події використовується лише одна клавіша), саме цей метод використовується для елементу підменю («Exit»):

«jmiExit.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_E, InputEvent.CTRL_MASK));

jmiExit.addActionListener (new ActionListener() {

public void actionPerformed (ActionEvent ae) {

System.exit(0);

}

});»

В цьому випадку використовується неіменований внутрішній клас, який реалізує інтерфейс ActionListener. Викликається метод «actionPerformed», в якому вказано, що при виклику (натисненні на цій елементі) повинна виконуватись команда «System.exit(0)», яка виконує вихід з програми.

б) Але можливий й інший варіант, коли використовується один обробник, а саме екземпляру цього класу. (такий метод використовують коли декілька клавіш виконують одну й ту ж саму дію, це робить заради того щоб уникнути дублювання коду.) Цей метод використовується для клавіш «Open», «Close».

jmiOpen.addActionListener(this); // ім'я команди дії по

умовчанню («Open»)

jmiSave.addActionListener(this); // ім'я команди дії по

умовчанню («Save»)

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

Розпізнавання яка сама подія спричинила виклик тої чи іншої дії, відбувається завдяки команді дії, за умовчанням яка має назву ту, яка написана на тій клавіші (елементі) який спричинив виклик, існує метод «setActionCommant», який дає змогу змінити ім'я команди, або задати його, наприклад якщо не використовувалося ім'я, а ідентифікатором будо зображення.

В нашому випадку це не потрібно адже нас саме цікавить це ім'я для команди дії. І навмисно для декількох елементів (клавіш) буде заданий один і той же ідентифікатором, щоб не дублювати код. Як і для підрозділів, для деяких пунктів створено мнемонічні клавіші. Але вагомою різницею є наступний рядок, завдяки команді «setAccelerator» відбувається налаштування комбінацій клавіш, рядок «KeyStroke.getKeyStroke» вказує на те, що буде відбуватися присвоєння комбінації, «KeyEvent.VK_E» як і при простому мнемонічній операції вказує на літеру яку треба натиснути для імітації натиснення клавіші, «InputEvent.CTRL_MASK» вказує на яку сумісну клавішу треба натиснути щоб викликати дію. На відміну від звичайного виклику мнемонічної клавіші (за допомого «alt») відтепер при одночасному натисненні цих двох клавіш буде викликана саме ця дія (в цьому випадку Exit).

Після об'яви, ініціалізації (в деяких випадках як з Exit і реалізації) треба внести всі елементи до складу підменю («File»), це робиться завдяки методу add() який описав раніше, код який безпосередньо виконує це написаний нижче:

jmFile.add(jmiNew); // Додання елементів до підменю файлів

jmFile.add(jmiOpen);

jmFile.add(jmiClose);

jmFile.addSeparator();

jmFile.add(jmiSave);

jmFile.add(jmiSaveAs);

jmFile.add(jmiSaveWP);

jmFile.add(jmiSaveWS);

jmFile.add(jmiSaveSearch);

jmFile.addSeparator();

jmFile.add(jmiPrev);

jmFile.add(jmiPrint);

jmFile.addSeparator();

jmFile.add(jmiExit);

Всі елементи будуть відображатись в підменю («File») в порядку їх внесення відтак першим буде «jmiNew» а останній «jmiExit». Як вже було сказано раніше

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

Опис підменю під назвою «jmEdit»:

Елементи підменю «jmEdit» зображені у таблиці 2.3 «JMenu jmEdit («Edit»)».

Таблиця 2.3 «JMenu jmEdit («Edit»)»

Елемент

(JMenuItem)

JMenuItem jmiCancel = new JMenuItem («Cansel»);

JMenuItem jmiReturn = new JMenuItem («Return»);

JMenuItem jmiCut = new JMenuItem («Cut»);

JMenuItem jmiCopy = new JMenuItem («Copy»);

jmiPaste = new JMenuItem («Paste»);

JMenuItem jmiPasteSpecial = new JMenuItem («Paste Special»);

JMenuItem jmiIH = new JMenuItem («Insert as a hyperlink»);

JMenu jmFill = new JMenu («Fill»);

JMenuItem jmiDown = new JMenuItem («Down»);

JMenuItem jmiRight = new JMenuItem («Right»);

JMenuItem jmiUp = new JMenuItem («Up»);

JMenuItem jmiLeft = new JMenuItem («Left»);

JMenu jmClear = new JMenu («Clear»);

JMenuItem jmiAll = new JMenuItem («All»);

JMenuItem jmiFormat = new JMenuItem («Format»);

JMenuItem jmiСontent = new JMenuItem («Сontent»);

JMenuItem jmiNotes = new JMenuItem («Notes»);

JMenuItem jmiDeletel = new JMenuItem («Delete»);

JMenuItem jmiDeleteList = new JMenuItem («Delete list»);

JMenuItem jmiMoveCopy = new JMenuItem («Move / Copy Sheet»);

JMenuItem jmiFind = new JMenuItem («Find»);

JMenuItem jmiReplace = new JMenuItem («Replace»);

JMenuItem jmiContinue = new JMenuItem («Continue»);

Як і раніше, для найважливіших елементів задані мнемонічні операції. Побачити які саме для якої клавіші можливо при затисненні клавіші «Alt». А комбінації швидкого доступу будуть показані з права від назви елементу.

Створені наступні обробники подій (подія - натискання на елемент.

Зв'язані наступні елементи з обробником екземпляру цього класу:

jmiCut.addActionListener(this); // ім'я команди дії по умовчанню

(«Cut»)

jmiCopy.addActionListener(this); // ім'я команди дії по

умовчанню («Copy»)

jmiPaste.addActionListener(this); // ім'я команди дії по

умовчанню («Paste»)

тобто використовується один обробник, а саме екземпляру цього класу. Цей обробник використовується для клавіш «Cut», «Copy», «Paste».

Видимість елементу по умовчанню є істинна (true) тобто елемент є видимий і його можливо використовувати, якщо ж ми хочемо зробити його не доступним треба використати метод «setEnabled(false)» саме значення в дужках і вирішує чи доступний елемент. В цьому випадку обрано «false» тобто елемент не доступний (візуально він буде сірого кольору та тусклий на фоні інших елементів). В цій програмі треба на початку зробити елемент Paste не доступним, адже с початку він не містить ніякого значення саме це робить наступний рядок: «jmiPaste.setEnabled(false)».

Вносимо всі елементи до складу підменю («Edit»), це робиться завдяки методу add() який описав раніше. Оскільки у декількох елементів підменю («Edit»)є свої підменю, то спочатку в ті підменю вносимо їх елементи, а потім вже безпосередньо готові підменю до складу підменю («Edit»). Код який безпосередньо треба вписувати для кожного елементу написаний нижче:

Внесення до підменю («Edit»)

jmEdit.addSeparator(); jmEdit.add(jmiFind);

jmEdit.add(jmiCancel); jmEdit.add(jmiReplace);

jmEdit.add(jmiReturn); jmEdit.add(jmiContinue);

jmEdit.addSeparator(); Внутрішнє підменю

jmEdit.add(jmiCut); Підменю («Fill»)

jmEdit.add(jmiCopy); jmFill.add(jmiRight);

jmEdit.add(jmiPaste); jmFill.add(jmiUp);

jmFill.add(jmiDown); jmFill.add(jmiLeft);

jmEdit.add(jmiPasteSpecial); Підменю («Cleat»)

jmEdit.add(jmiIH); jmClear.add(jmiFormat);

jmEdit.addSeparator(); jmClear.add(jmiNotes);

jmEdit.add(jmFill); jmClear.add(jmiAll);

jmEdit.add(jmiDeletel); jmClear.add(jmiСontent);

jmEdit.add(jmiDeletel); jmEdit.add(jmiMoveCopy);

jmEdit.add(jmiDeleteList); jmEdit.add(jmClear);

Спочатку вносяться елементи до внутрішніх підменю. А вже потім до («Edit»).

Опис підменю під назвою «jmView»:

Елементи підменю «jmView» зображені у таблиці 2.4 «JMenu jmView («View»)».

Таблиця 2.4 «JMenu jmView («View»)»

Елемент

(JMenuItem)

JMenuItem jmiNormal = new JMenuItem («Normal»);

JMenuItem jmiPageLayout = new JMenuItem («Page Layout»);

JMenuItem jmiTaskPane = new JMenuItem («Task Pane»);

JMenuItem Toolbar = new JMenuItem («Toolbar»);

JMenuItem jmiFormulaBar = new JMenuItem («Formula Bar»);

JMenuItem StatusBar = new JMenuItem («Status bar»);

JMenuItem jmiHeaderFooter = new JMenuItem («Header and Footer…»);

JMenuItem jmiNote = new JMenuItem («Notes»);

JMenuItem jmiRepresentations = new JMenuItem («Representations…»);

JMenuItem jmiFullScreen = new JMenuItem («Full screen»);

JMenuItem jmiScale = new JMenuItem («Scale…»);

Як і раніше вносимо всі елементи до складу підменю («View»):

jmView.add(jmiNormal); jmView.addSeparator();

jmView.add(jmiPageLayout); jmView.add(jmiFullScreen);

jmView.add(jmiHeaderFooter); jmView.add(jmiFormulaBar);

jmView.addSeparator(); jmView.add(jmiNote);

jmView.add(jmiTaskPane); jmView.addSeparator();

jmView.add(Toolbar); jmView.add(StatusBar);

jmView.add(jmiRepresentations); jmView.add(jmiScale);

Опис підменю під назвою «jmHelp»:

Елементи підменю «jmHelp» зображені у таблиці 2.5 «JMenu jmHelp («Help»)».

Таблиця 2.5 «JMenu jmHelp («Help»)»

Елемент (JMenuItem)

JMenuItem jmiHelp = new JMenuItem («Help»);

Як і раніше задаються мнемонічна клавіша, та клавіша швидкого доступу. Вносимо елемент до складу підменю («Help»): jmHelp.add(jmiHelp);

Опис підменю під назвою «jmInsert»:

Елементи підменю «jmInsert» зображені у таблиці 2.6 «JMenu jmInsert («Insert»)».

Таблиця 2.6 «JMenu jmInsert («Insert»)»

Елемент

(JMenuItem)

JMenuItem jmiCells= new JMenuItem («Cells…»);

JMenuItem jmiLine = new JMenuItem («Line»);

JMenuItem jmiColumns = new JMenuItem («Columns»);

JMenuItem jmiSheet = new JMenuItem («Sheet»);

JMenuItem jmiCharts= new JMenuItem («Charts…»);

JMenuItem jmiCharts= new JMenuItem («Charts…»);

JMenuItem jmiFunction= new JMenuItem («Function»);

JMenu jmFigure = new JMenu («Figure»);

JMenuItem jmiPicture= new JMenuItem («Picture…»);

JMenuItem jmiFromFile= new JMenuItem («From File…»);

JMenuItem jmiCameraScanner= new JMenuItem («With the camera / scanner»);

Внесення елементів:

Внесення до підменю («Insert») jmInsert.addSeparator();

jmInsert.add(jmiCells); jmInsert.add(jmiSymbols);

jmInsert.addSeparator(); jmInsert.addSeparator();

jmInsert.add(jmiLine); jmInsert.add(jmiFunction);

jmInsert.addSeparator(); jmInsert.addSeparator();

jmInsert.add(jmiColumns); jmInsert.add(jmFigure);

jmInsert.addSeparator(); Внутрішнє підменю («Figure»)

jmInsert.add(jmiSheet); jmFigure.add(jmiPicture);

jmInsert.addSeparator(); jmFigure.add(jmiFromFile);

jmInsert.add(jmiCharts); jmFigure.add(jmiCameraScanner);

Опис підменю під назвою «jmTools»:

Елементи підменю «jmTools» зображені у таблиці 2.7 «JMenu jmTools («Tools»)».

Таблиця 2.7 «JMenu jmTools («Tools»)»

Елемент

(JMenuItem)

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

JMenuItem jmiDescriptiveStatistics = new JMenuItem («Descriptive statistics»);

Внесення до підменю («Tools»)

jmTools.add(jmiStatisticalAnalysis);

Внутрішнє підменю («Statistical analysis»)

jmiStatisticalAnalysis.add(jmiDescriptiveStatistics);

Детально про це підменю розповідається пізніше, зараз зауважу лише те що елемент «jmiDescriptiveStatistics» викликає діалогове вікно.

Опис підменю під назвою «jmFormat»:

Елементи підменю «jmFormat» зображені у таблиці 2.8 «JMenu jmFormat («Format»)».

Таблиця 2.8 «JMenu jmFormat («Format»)»

Елемент

(JMenuItem)

JMenuItem jmiFCells= new JMenuItem («Cells»);

JMenu jmFLine = new JMenu («Line»);

JMenuItem jmiHeight = new JMenuItem («Height»);

JMenuItem jmiAHeight = new JMenuItem («AutoFit height»);

JMenuItem jmiHide = new JMenuItem («Hide»);

JMenuItem jmiDisplay = new JMenuItem («Display»);

JMenu jmFColumns = new JMenu («Columns»);

JMenuItem jmiCWidth = new JMenuItem («Width»);

JMenuItem jmiCAWidth = new JMenuItem («AutoFit width»);

JMenuItem jmiCHide = new JMenuItem («Hide»);

JMenuItem jmiCDisplay = new JMenuItem («Display»);

JMenu jmFSheet = new JMenu («Sheet»);

JMenuItem jmiRename = new JMenuItem («Rename»);

JMenuItem jmiSHide = new JMenuItem («Hide»);

JMenuItem jmiSDisplay = new JMenuItem («Display»);

Внесення до підменю («Format») Внутрішнє підменю

jmFormat.add(jmiFCells); Підменю («Line»)

jmFormat.addSeparator(); jmFLine.add(jmiHeight);

jmFormat.add(jmFLine); jmFLine.add(jmiHide);

jmFormat.addSeparator(); jmFLine.add(jmiDisplay);

jmFormat.add(jmFColumns); Підменю («Columns»)

jmFormat.addSeparator(); jmFColumns.add(jmiCWidth);

jmFormat.add(jmFSheet);

jmFColumns.add(jmiCAWidth);

Підменю («Sheet») jmFColumns.add(jmiCHide);

jmFSheet.add(jmiRename);

jmFColumns.add(jmiCDisplay);

jmFSheet.add(jmiSHide);

jmFSheet.add(jmiSDisplay);

в) Приєднання всіх підменю до головного (JMenuBar)

jmb.add(jmFile); jmb.add(jmFormat);

jmb.add(jmEdit); jmb.add(jmTools);

jmb.add(jmView); jmb.add(jmData);

jmb.add(jmInsert); jmb.add(jmHelp);

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

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

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);

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

}

В другому рядку створюється безпосередньо таблиця, існує декілька конструкторів для побудови, які використовують стандартну модель, або модель створену користувачем, для створення користувачем є окремий клас який має назву AbstractTableModel для цієї таблиці була створена спеціальна модель(MarchModel), для створення таблиці також використовується конструктор, який задає необхідну кількість стовпців та рядків (в даному випадку 50 на 10). Наступні два рядки задають розмір першого стовпця (в якому будуть пронумеровані рядки). Після чого, функцією «setGridColor (Color.BLAK)» для кожної таблиці задається колір решітки (для зручності). У 7-17 рядках виконується метод, завдяки якому відбувається вирівнювання по центру. Функція «setCellSelectionEnabled(true)» дозволяє вибирати окремі комірки. І на останок всі таблиці включаються в состав компонента JScrollPane. Заголовки стовпців автоматично відображаються на екрані. Таблиця генерує ряд подій найважливішими для цієї програми є вибір комірок (які вибрані користувачем) (ListSelectionEvent) та подія яка виникає при зміні даних в комірках (TableModelEvent).

Далі створюються вкладки, спеціальний контейнер реалізується класом JTabbedPane (контейнер був оголошений в самому початку «JTabbedPane jtp»). Він керує компонентами, розміщуючи їх «на передній план». Ініціалізація відбувається у рядку «jtp = new JTabbedPane (JTabbedPane.BOTTOM)» JTabbedPane.BOTTOM розміщує ярлики цих вкладок по нижній частині вікна. Далі відбувається приєднання JScrollPane (а разом з нею і таблиці) до контейнера за допомоги метода (addTab).

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

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

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

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

І на останок відбувається приєднання вкладок до панелі головного контейнера. Це відбувається у рядку «getContentPane().add(jtp)».

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

jcbTomb = new JComboBox (Tomb);

jcbTomb.setMaximumSize (new Dimension (200, 20));

jcbTomb.setActionCommand («Tomb»); // ім'я команди дії («Tomb»)

jcbTomb.addActionListener(this);

В першому рядку відбувається безпосередньо створення, як завжди існує декілька конструкторів. В даному випадку використовується конструктор, який створює список що розгортається, містячи пункти, задані за допомогою масива Tomb. Tomb це масив строк який вже описувався раніше (в ньому містяться назви деяких шрифтів). У рядку 4 відбувається зв'язування об'єкта класу JComboBox з обробником екземпляру цього класу. Перед чим у рядку 3 задається ім'я команди дії для ідентифікації об'єкту. (як вже було сказано раніше всі об'єкти які ми зв'язуємо з обробником екземпляру цього класу будуть реалізовуватися в одному методі пізніше). Метод у рядку 2 («setMaximumSize») задає максимальні розміри вікна об'єкту JComboBox (за умовчання він розтягнеться на довжину всього рядка).

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

«SpinnerNumberModel spm =new SpinnerNumberModel (fontSize, 1,30, 1);»

«fontSize» задає начальне значення, наступна за ним одиниця вказує на крок з яким відбувається прирощення, число 30 вказує на максимальне число, яке буде доступне, остання цифра 1 на мінімальне.В рядку «jspin = new JSpinner(spm)» відбувається створення об'єкту JSpinner який використовує підготовлену раніше модель spm. Установка бажаних розмірів інкрементного регулятора відбувається у рядку: «jspin.setPreferredSize (new Dimension (60, 20))».

Далі за допомоги окремого обробника, тобі ж обробника створеного за допомогою неіменованого внутрішнього класу, відбувається обробки події при зміні значення інкрименту.

jspin.addChangeListener (new ChangeListener() {

public void stateChanged (ChangeEvent ce) {

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

fontSize = bSize;

jbtn.doClick();

}

});

А саме при зміні значення регулятора відбувається присвоєння вибраного значеня змінній fontSize, а в кінці обробника подій імітується натиснення на кнопку яка викликає обробник подій дії класу (саме той який використовують всі об'єкти, тобто загальний) а вже безпосередньо в ньому відбувається зміна шрифту.

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

Кнопки: створення нового документу («New»), відкриття документу («Open»), зберігання документу («Save»), печаті («Print»), вирізання тексту в комірці («Cut»), копіювання тексту («Copy»), вставки тексту («Paste»), переходу на крок на зад («Cancel»), переходу на крок вперед («Return»), кнопки вибору шрифту (жирний («FontBold»), курсив («FontItalic»), звичайний («FontPlain»)), функції, а також регулятор розмірності шрифту та список вибору шрифту.

Спочатку створюється сама панель у рядку «JToolBar jtb = new JToolBar («Debug»)» Потім створюються кнопки які будуть входити в состав панелі, для їхнього зображення в програмі використовуються зображення:

JButton jbtnNew = new JButton (innerImgs[14]);

JButton jbtnOpen = new JButton (innerImgs[17]);

JButton jbtnSave = new JButton (innerImgs[23]);

JButton jbtnPrint = new JButton (innerImgs[20]);

JButton jbtnCut = new JButton (innerImgs[4]);

JButton jbtnCopy = new JButton (innerImgs[3]);

jbtnPaste = new JButton (innerImgs[19]);

jbtnPaste.setEnabled(false);

JButton jbtnCancel = new JButton (innerImgs[0]);

JButton jbtnReturn = new JButton (innerImgs[21]);

JButton jbtnFun = new JButton (innerImgs[11]);

jtbFontBold = new JToggleButton (innerImgs[7]);

jtbFontItalic = new JToggleButton (innerImgs[8]);

jtbFontPlain = new JToggleButton (innerImgs[9], true);

Всі кнопки одразу доступні для вибору за виключенням вставки (Paste). Далі відбувається включення деяких кнопок в групу

ButtonGroup bg = new ButtonGroup();

bg.add(jtbFontBold);

bg.add(jtbFontItalic);

bg.add(jtbFontPlain);

У першому рядку відбувається створення групи, а нижче до нього додаються компоненти (кнопки які треба об'єднати.).

Це зроблено тому що одночасно може бути використана лише одна кнопка, мова йде про вибір шрифту, саме для нього використовується кнопка-перемикач, яка дозволяє бачити який саме шрифт (жирний, курсив чи звичайний) вибраний в даний момент. За умовчанням вибирається шрифт звичайний, на що вказує допоміжне слово «true».

Для деякі кнопки зв'язуються з обробником екземпляру цього класу, оскільки ініціалізація усіх кнопок відбувалась за допомоги зображень, для кожної кнопки треба задати команду дії, про яку згадувалося раніше:

jbtnNew.setActionCommand («New»);

jbtnOpen.setActionCommand («Open»);

jbtnSave.setActionCommand («Save»);

jbtnPrint.setActionCommand («Print»);

jbtnCut.setActionCommand («Cut»);

jbtnCopy.setActionCommand («Copy»);

jbtnPaste.setActionCommand («Paste»);

jbtnCancel.setActionCommand («Cancel»);

jbtnReturn.setActionCommand («Return»);

jbtnFun.setActionCommand («Fun»);

jtbFontBold.setActionCommand («FontBold»);

jtbFontItalic.setActionCommand («FontItalic»);

jtbFontPlain.setActionCommand («FontPlain»);

Безпосереднє зв'язування з обробником подій:

jbtnOpen.addActionListener(this); // ім'я команди дії («Open»)

jbtnSave.addActionListener(this); // ім'я команди дії («Save»)

jbtnCut.addActionListener(this); // ім'я команди дії («Cut»)

jbtnCopy.addActionListener(this); // ім'я команди дії («Copy»)

jbtnPaste.addActionListener(this); // ім'я команди дії («Paste»)

jbtnFun.addActionListener(this); // ім'я команди дії («Fun»)

jtbFontBold.addActionListener(this); // ім'я команди дії

(«FontBold»)

jtbFontItalic.addActionListener(this); // ім'я команди дії

(«FontItalic»)

jtbFontPlain.addActionListener(this); // ім'я команди дії

(«FontPlain»)

Останнім кроком є включення всіх кнопок в состав панелі інструментів:

jtb.add(jbtnNew); jtb.add(jbtnCancel);

jtb.add(jbtnOpen); jtb.add(jbtnReturn);

jtb.add(jbtnSave); jtb.addSeparator();

jtb.addSeparator(); jtb.add(jtbFontBold);

jtb.add(jbtnPrint); jtb.add(jtbFontItalic);

jtb.addSeparator(); jtb.add(jtbFontPlain);

jtb.add(jbtnCut); jtb.add(jcbTomb);

jtb.add(jbtnCopy); jtb.add(jspin);

jtb.add(jbtnPaste); jtb.add(jbtnFun);

jtb.addSeparator();

Наступною задачею є створення діалогового вікна його оголошення також відбувається на початку програми, в ході ініціалізації графічного інтерфейсу відбувається його створення «jfc = new JFileChooser()», робота з вікнами дещо відрізняється, вона нагадує метод, для виклику якого потрібна інша кнопка яка і активує, це відбувається в методі обробки екземпляру цього класу.

В кінці відбувається приєднання меню та панелі інструментів до аплету. Панель інструментів, як і раніше вкладки приєднуються до панелі аплета, «getContentPane().add(jfc)», а ось меню приєднується безпосередньо до самого аплета (контейнера верхнього рівня) «setJMenuBar(jmb)». На цьому метод «initialization ()» завершується, наступним кроком слід описати реалізацію метода обробки подій цього класу (обробник екземпляру цього класу). Цей метод має назву «actionPerformed», свою роботу цей метод розпочинає з визначення в якій вкладці була виконана дія саме це робить цей рядок «Q = jtp.getSelectedIndex()» в цьому рядку передається номер вкладки змінній «Q», після чого вже буде відомо до якого елементу масиву таблиці слід звертатися. Далі створюються дві змінні «row» і «col» в них буде зберігатися дані з яким рядом і яким стовпчиком виконується дія. І ось тепер безпосередньо починається опис необхідних дій в залежності від того яка кнопка була нажата (дія зроблена).

В рядку «if (ae.getActionCommand().equals («Tomb»))» виконується перевірка чи дію спричинив об'єкт ім'я команди якого є «Tomb», якщо так то вибране значення записується в змінну «item', «item = (String) jcbTomb.getSelectedItem()» (зміна вибору шрифту виконається в ході цього метода, оскільки для зміни розміру шрифту, його начертання та виду відповідає один метод, саме тому при реалізації раніше обробки дії зміни розміру шрифту імітувався виклик цього методу. Як і розмір шрифту заносився в змінну «fontSize» так и тут ім'я шрифту вноситься змінну «item», в дію всі зміни приходять під час реалізації начертання шрифту, оскільки він завжди виконується (дані розміру шрифту та його назви записуються в окремі змінні тому що інакше при кожній зміні окремо якогось з трьох елементів виникав би конфлікт (разом з одним змінювались й всі інші, навіть якщо це і не потрібно)). Далі виконується перевірка який саме вид начертання шрифту вибрано

if (jtbFontBold.isSelected())

if (jtbFontItalic.isSelected())

if (jtbFontPlain.isSelected())

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

В рядку:

if (ae.getActionCommand().equals («Copy»)||

ae.getActionCommand().equals («Cut»))

робиться перевірка чи подію спричинив один з об'єктів ім'я якого «Copy» чи «Cut» якщо ж це підтверджується то в першу чергу активізується кнопка вставки (стає доступною) це виконується в рядках:

jmiPaste.setEnabled(true);

jbtnPaste.setEnabled(true)

Наступним кроком є визначення який стовпчик та рядок спричинили подію і поміщення цих даних відповідно в змінні «row» і «col»,

row = jtab[Q].getSelectedRow();

col = jtab[Q].getSelectedColumn()

І на останок значення комірки по цим координат копіюється в строку «CopyPaste»:

CopyPaste = (String) jtab[Q].getValueAt (row, col);

Після чого знову робиться перевірка чи подію спричинив саме об'єкт з ім'ям «Cut» якщо ж це дійсно так, то після копії елемента значення комірки стає порожнім:

if (ae.getActionCommand().equals («Cut»))

jtab[Q].setValueAt («», row, col);

В рядку:

if (ae.getActionCommand().equals («Paste»))

перевіряється чи подію спричинив об'єкт з ім'ям «Paste» і якщо це підтверджується то знову визначається який стовпчик та рядок спричинили подію і ці дані зносяться відповідно в змінні «row» і «col». І вже по цим даним копіюється значення зі змінної «CopyPaste», «jtab[Q].setValueAt (CopyPaste, row, col)».

В рядках:

if (ae.getActionCommand().equals («Open»))

та

if (ae.getActionCommand().equals («Save»))

перевіряється чи подію спричинив об'єкт з ім'ям «Open» або «Save» і якщо це підтверджується в залежності від підтвердження відкривається діалогове вікно для відкриття файлу або ж для збереження відповідно, jfc.showOpenDialog(null);

jfc.showSaveDialog(null)

Наступний метод є дуже важливий, бо без нього не буде працювати програма, цей метод має назву main().

public static void main (String args[]) {

SwingUtilities.invokeLater (new Runnable() {

public void run() {

new Gnumeric().setVisible(true);

}

});

}

Для того щоб код, підтримуючий інтерфейс, міг бути створений в потоці обробки подій, треба використовувати один з двох методів, певних в класі «SwingUtilities: invokeLater() и invokeAndWait()». «InvokeLater» одразу повертає управління викликаючому методу, а це саме те що нам потрібно. Заголовок «InvokeLater» має вигляд: «static void invokeLater (Runnable obj)» де «obj» - це об'єкт «Runnable», метод «run ()» котрого викликається в потоці обробки дії. И наостанок створюємо та забезпечуємо відображення вікна:

Gnumeric().setVisible(true);

Додатковий клас

Модель таблиці яка була спеціально створена для цієї програми, та використана при формуванні таблиці описана нижче.Перш за все спочатку йде оголошення класу, як вже було сказано раніше для цього необхідний окремий клас який має назву «AbstractTableModel».

Оголошення: «class MarchModel extends AbstractTableModel». Далі створюються дві змінні в яких у подальшому будуть поміщатися значення необхідної розмірності таблиці це «numRows» та «numCols». Далі оголошено два масиви в першому будуть зберігатися імена стовпців (масив строк), а в другому дані комірок (масив об'єктів), це масиви «colNames» та «data» відповідно. Далі створюється конструктор, конструктор потребує введення двох значень які заносяться в «numRows» та «numCols». Далі створюється масив строк, розмірності якого дорівнює кількості колонок тут будуть зберігатися заголовки стовпців. Далі відбувається формування імен стовпців за допомоги циклу, код який це робить продемонстрований нижче:

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);

}

Як видно з коду першому стовпцю присвоюється символ «#». А для всіх інших формується порядковий номер в виді літери. Після того як заголовки були створені слідкуючим етапом є заповнення таблиці порожніми значеннями. Перед чим спочатку створюється масив з розмірністю відповідною до кількості стовпців та рядків. Заповнення порожніми значеннями показано в циклі нижче:

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] = «»;

}

}

Далі відбувається створення декількох важливих методів для класу:Спочатку реалізуються методи які при необхідності повертаю значення кількості стовпців та рядків, потім метод який повертає значення імені стовпця, для виклику метода треба вказати який саме стовпчик цікавить. Далі відбувається створення вкрай важливого методів для цієї програми які повертають значення яке міститься в координатах, координати задає користувач. А другий не менш важливий метод задає значення в координатах які задає користувач. І на останок створюється метод в якому описується до яких комірок користувач має доступ, відтак комірки, за допомогою яких відбувається нумерування комірок недоступні.

Індивідуальне завдання

Моїм індивідуальним завданням є створення описових статистик (Descriptive Statistic). Для виконання всіх розрахунків і дій над елементами я використав створений мною клас під назвою «ObrobElEntered», який в свою чергу є підкласом іншого мого класу який має назву «DescriptiveStatisticsDialog».

Клас «ObrobElEntered»

Спочатку опишу підклас.

Слово «private» має на увазі що цей клас доступний лише класу, підкласом якого він є. Клас має наступні змінні:

- int Q = jtp.getSelectedIndex();

Ця змінна отримує номер активної вкладки (вкладка для якої треба зробити описові статистики.

- int [] sCol = jtab[Q].getSelectedColumns();

Масив який містить номери всіх вибраних колонок.

- int [] sRow = jtab[Q].getSelectedRows();

Масив який містить номери всіх вибраних столбцов.

- int kolvo = (sCol.length) * (sRow.length);

Зміна яка містить кількість вибраних комірок.

- int dlin = sRow.length;

Зміна яка містить кількість вибраних столбцов.

- int[] MassEl = new int [kolvo];

Масив який буде вміщати в себе всі введені єлементи.

- int numberOfElements;

Зміна яка містить кількість комірок зі значенням (кол-во елементів массиву).

- int sum;

Зміна яка містить суму всіх елементів масиву.

Також клас має 5 методів:

а) Можливо навіть сказати що перший метод є найважливішим, оскільки без

нього всі інші перестануть працювати цей метод має назву getMass ();

private int [] getMass () {

int j = 0, b =0, array=0;

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

String str = (String) jtab[Q].getValueAt (sRow[j], sCol[b]);

if (str!= «») {

numberOfElements+=1;

MassEl[array] = Integer.parseInt(str);

array++;

}

j++;

if (j == dlin) {++b; j=0;}

}

Arrays.sort(MassEl);

return MassEl;

}

В першому рядку можно побачити після завершення функції, вона буде повертати масив типу integer. Що ж до описання безпосередньо дій:

Створюються три додаткові локальні змінні:

j - вказує з яким номером стовпця слід зараз працювати;

b - вказує з яким номером масиву «sCol» слід працювати;

array - вказує в який елемент по рахунку треба вставляти число;

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

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

public double getMedian () {

if (numberOfElements == 2) return (float) (MassEl[0] + MassEl[1])/2;

else {

if (numberOfElements% 2 == 0)

return (float) (MassEl[(int) numberOfElements/2-1] + MassEl[(int) numberOfElements/2])/2;

else return MassEl[(int) numberOfElements/2];

}

}

Цей метод повертає число з плавучою крапкою.

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


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

  • Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "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-файлы представлены только в архивах.
Рекомендуем скачать работу.