
- •Опис застосування програми bluej
- •3 Настанова з інсталяції програми
- •4 Технологія розробки програмного додатку
- •4.1 Розробка класу для завантаження налаштувань
- •4.2 Розробка класу регулятора
- •4.3 Розробка головного класу додатку
- •4.4 Проектування графічного інтерфейсу
- •4.4.1 Розмітка інтерфейсу вікон програми
- •4.5 Розробка класу дляреалізації графічного інтерфейсу
- •Висновок
- •Список використаної літератури
- •Додаток а. Програмний код для обробки xml файлу з налаштуваннями програми
- •Додаток б. Програмний код класу Controller
- •Додаток в. Програмний код класу Application
- •Додаток г. Програмний код класу gui
- •Додаток г. Програмний код класу Graph
- •Додаток e. Вхідні дані
- •Додаток ж. Файл «Object»
4.5 Розробка класу дляреалізації графічного інтерфейсу
Клас дляреалізації графічного інтерфейсу виконує наступні задачі:
1. Створює 4 вікна за допомогою бібліотеки Swing: вікно відображення стану ТП (головне вікно), інформаційне вікно, вікно установки завдання, вікно відображення графіків перехідних процесів.
2. Обробляє події компонентів 4 вікон.
3. Щомиті оновлює інформаційні параметри, що отримуються з контролера, сигналізує про вихід за регламентні зони, передає інформацію об'єкту класу Graph для побудови графіку.
Структура класу наведена на рисунку 4.8.
Рисунок 4.8 – Структура класу реалізації графічного інтерфейсу
Основний клас для реалізації діалогового вікна в бібліотеках Java – JFrame. У Java під фреймом (frame) розуміється діалогове вікно верхнього рівня з заголовком, стандартної рамкою і кнопками – відкрити/закрити/ згорнути.
Розглянемо метод ініціалізації головного вікна прогграми за допомогоюбібліотеки swiXML. Наступний код ініціалізує головне вікно програми і розміщує на ньому всі описані у відповідному XML файлі компоненти. Даний метод (і всі методи ініціалізації вікна) повинен бути викликаний в конструкторі класу GUI.
Конструктор класу GUI показаний в додатку Г.
Клас Graphпоказаний в додатку Д.
Висновок
В курсовій роботі було створено програмне забезпечення для управління технологічною установкою за допомогою платформи Java з використанням сучасних підходів до побудови графічного інтерфейсу, обробки та зберігання даних, реалізації алгоритмів керування.
Программа виконує такі функції, як відображення на екрані схему ділянки з динамічно виведеними показаннями технологічних змінних і керуючих впливів, виведення журналу аварійних повідомлень, вікно завдання технологічних змінних, відображення графіка технологічних змінних, інформаційне вікно з описом технологічного процесу і даними про розробника та ін..
Список використаної літератури
А.О.Стопакевич. Методичні вказівки для виконання курсової роботи «Сучасні комп’ютерні технології», 2013 – Одеса: ОНАЗ ім. О.С. Попова, 2013. – 37 с.
Середа розробки BlueJ> = 3 (http://www.bluej.org/)
SwiXML 2.01 (http://www.swixml.org/)
Додаток а. Програмний код для обробки xml файлу з налаштуваннями програми
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import org.math.array.util.*;
import java.lang.Math.*;
import org.math.array.DoubleArray.*;
public class XMLInterface
{
private static double dt;
private static int inputs, outputs, xsize;
private static double[][] ad, bd, c, d, ar, br, cr;
private static int[] uplimits, downlimits;
private static double[] unom, ynom, fmax;
private final String OBJECT_FILE="data/object.xml";
public static double getDt() {return dt;}
public static int getInputs() {return inputs;}
public static int getOutputs() {return outputs;}
public static int getXsize() {return xsize;}
public static int[] getUplimits() {return uplimits;}
public static int[] getDownlimits() {return downlimits;}
public static double[] getUnom() {return unom;}
public static double[] getYnom() {return ynom;}
public static double[] getFmax() {return fmax;}
public static double[][] getAd() {return ad;}
public static double[][] getBd() {return bd;}
public static double[][] getC() {return c;}
public static double[][] getD() {return d;}
public static double[][] getAr() {return ar;}
public static double[][] getBr() {return br;}
public static double[][] getCr() {return cr;}
/** *Метод для завантаження матриці в текстовому поданні до двовимірний
масив Java (s–рядок, columnDelimiter – роздільник cтовпців,
rowDelimiter – роздільник рядків)
*/
private static double[][] readStringDouble (String s, String columnDelimiter, String rowDelimiter)
{
double[][] array;
String[]rows = s.split (rowDelimiter);
array = new double [rows.length][];
for (int i=0; i<rows.length;i++)
{
String[]cols = rows[i].split (columnDelimiter);
array[i]= new double[cols.length];
for (int j=0;j<cols.length;j++)
{
array[i][j]=Double.parseDouble(cols[j]);
}
}
return array;
}
public XMLInterface()
{
try
{
File fXmlFile = new File (OBJECT_FILE);
DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse (fXmlFile);
doc.getDocumentElement ().normalize ();
NodeList Nlc; Element Elements; String s;
Nlc=doc.getElementsByTagName ("dt"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.dt=Double.valueOf (s);
Nlc=doc.getElementsByTagName ("inputs"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.inputs=Integer.valueOf (s);
Nlc=doc.getElementsByTagName ("outputs"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.outputs=Integer.valueOf (s);
Nlc=doc.getElementsByTagName ("xsize"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.xsize=Integer.valueOf (s);
Nlc=doc.getElementsByTagName ("ar"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.ar=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("br"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.br=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("cr"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.cr=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("ad"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.ad=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("bd"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.bd=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("c"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.c=readStringDouble (s, "\t", "\n");
Nlc=doc.getElementsByTagName ("d"); Elements = (Element) Nlc.item(0);
s = Elements.getChildNodes ().item (0).getNodeValue ().trim ();
this.d=readStringDouble (s, "\t", "\n");
this.uplimits = new int [this.outputs];
Nlc = doc.getElementsByTagName ("uplimits");
Elements = (Element) Nlc.item(0);
s= Elements.getChildNodes ().item (0).getNodeValue().trim ();
String [] ss;
ss=s.split(",");
for (int i=0;i<ss.length;i++)
this.uplimits[i]=Integer.valueOf (ss[i].trim());
this.downlimits = new int [this.outputs];
Nlc = doc.getElementsByTagName ("downlimits");
Elements = (Element) Nlc.item(0);
s= Elements.getChildNodes().item (0).getNodeValue().trim ();
ss=s.split(",");
for (int i=0;i<ss.length;i++)
this.downlimits[i]=Integer.valueOf (ss[i].trim());
this.unom=new double[this.inputs];
this.ynom=new double[this.inputs];
this.fmax=new double[this.inputs];
this.unom = new double [this.outputs];
Nlc = doc.getElementsByTagName ("unom");
Elements = (Element) Nlc.item(0);
s= Elements.getChildNodes().item (0).getNodeValue().trim ();
ss=s.split(",");
for (int i=0;i<ss.length;i++)
this.unom[i]=Double.valueOf (ss[i].trim());
this.ynom = new double [this.outputs];
Nlc = doc.getElementsByTagName ("ynom");
Elements = (Element) Nlc.item(0);
s= Elements.getChildNodes().item (0).getNodeValue().trim ();
ss=s.split(",");
for (int i=0;i<ss.length;i++)
this.ynom[i]=Double.valueOf (ss[i].trim());
this.fmax = new double [this.outputs];
Nlc = doc.getElementsByTagName ("fmax");
Elements = (Element) Nlc.item(0);
s= Elements.getChildNodes().item (0).getNodeValue().trim ();
ss=s.split(",");
for (int i=0;i<ss.length;i++)
this.fmax[i]=Double.valueOf (ss[i].trim());
// initialise instance variables
}
catch (Exception e)
{
System.out.println (e.getMessage());
e.printStackTrace();
}
}
}