
- •Опис застосування програми bluej
- •3 Настанова з інсталяції програми
- •4 Технологія розробки програмного додатку
- •4.1 Розробка класу для завантаження налаштувань
- •4.2 Розробка класу регулятора
- •4.3 Розробка головного класу додатку
- •4.4 Проектування графічного інтерфейсу
- •4.4.1 Розмітка інтерфейсу вікон програми
- •4.5 Розробка класу дляреалізації графічного інтерфейсу
- •Висновок
- •Список використаної літератури
- •Додаток а. Програмний код для обробки xml файлу з налаштуваннями програми
- •Додаток б. Програмний код класу Controller
- •Додаток в. Програмний код класу Application
- •Додаток г. Програмний код класу gui
- •Додаток г. Програмний код класу Graph
- •Додаток e. Вхідні дані
- •Додаток ж. Файл «Object»
Додаток г. Програмний код класу gui
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.image.BufferedImage;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.imageio.ImageIO;
import javax.swing.table.DefaultTableModel;
import java.text.SimpleDateFormat;
import org.swixml.SwingEngine;
import static org.math.array.DoubleArray.*;
public class GUI
{
private static XMLInterface xml;
private static Controller c;
private static int [] uplimits,downlimits;
private JFrame mainDialog,aboutDialog,graphDialog,zadDialog;
private JPanel graphPanel;
private JTextPane about_txtDescr;
private JLabel picLabel;
private JButton btn_start, btn_contol, btn_graph, btn_z1, btn_about;
private JButton cmdChangeMode, cmdShowGraph;
private JProgressBar pry1, pry2, pru1, pru2;
private JLabel lby1, lby2;
private JSpinner spu1, spu2, spz1,spz2;
private JTable logTable;
private DefaultTableModel tablemodel;
private javax.swing.Timer timer;
private static final String MAIN_DESCRIPTOR="forms/main_window.xml";
private static final String ABOUT_DESCRIPTOR="forms/about.xml";
private static final String GRAPH_DESCRIPTOR="forms/graph.xml";
private static final String ZAD_DESCRIPTOR="forms/zad_window.xml";
private static final String SCHEME_FILE="img/tech_scheme.png";
private static final String HTML_FILE="docs/description.html";
private static final String CONTENT_TYPE="text/html; charset=utf-8";
private SwingEngine swix=new SwingEngine (this);
public void logEvent (String msgtype, String msgtext)
{
String TIME_FORMAT_NOW = "HH: mm: ss";
String DATE_FORMAT_NOW = "dd. MM. yy";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat(TIME_FORMAT_NOW);
SimpleDateFormat sdf2 = new SimpleDateFormat(TIME_FORMAT_NOW);
String[] data = {sdf1.format (cal.getTime()),
sdf2.format (cal.getTime()), msgtype, msgtext};
tablemodel.addRow (data);
}
public void initMainDialog() throws Exception
{
try
{
mainDialog=(JFrame)swix.render(MAIN_DESCRIPTOR);
mainDialog.setResizable(false);
final Toolkit toolkit=Toolkit.getDefaultToolkit();
final Dimension screenSize=toolkit.getScreenSize();
final int x=(screenSize.width-mainDialog.getWidth())/2;
final int y=(screenSize.height-mainDialog.getHeight())/2;
mainDialog.setLocation(x,y);
BufferedImage myPicture=ImageIO.read(new File(SCHEME_FILE));
picLabel.setIcon(new ImageIcon(myPicture));
SpinnerModel sm1=new SpinnerNumberModel(70,0,100,1);
SpinnerModel sm2=new SpinnerNumberModel(70,0,100,1);
spu1.setModel(sm1);
spu2.setModel(sm2);
tablemodel = new DefaultTableModel ()
{
@Override
public boolean isCellEditable (int row, int column)
{
return false;
};
};
tablemodel.addColumn("Час");
tablemodel.addColumn("Дата");
tablemodel.addColumn("Тип");
tablemodel.addColumn("Повідомлення");
logTable.setModel(tablemodel);
logTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
logTable.getColumnModel().getColumn(0).setMaxWidth(80);
logTable.getColumnModel().getColumn(0).setMinWidth(80);
logTable.getColumnModel().getColumn(0).setWidth(80);
logTable.getColumnModel().getColumn(0).setPreferredWidth(80);
logTable.getColumnModel().getColumn(1).setMaxWidth(80);
logTable.getColumnModel().getColumn(1).setMinWidth(80);
logTable.getColumnModel().getColumn(1).setWidth(80);
logTable.getColumnModel().getColumn(1).setPreferredWidth(80);
logTable.getColumnModel().getColumn(2).setMaxWidth(120);
logTable.getColumnModel().getColumn(2).setMinWidth(120);
logTable.getColumnModel().getColumn(2).setWidth(120);
logTable.getColumnModel().getColumn(2).setPreferredWidth(120);
}
catch (Exception e)
{
System.out.println ("Error in main");
e.printStackTrace();
}
}
public void initAboutDialog() throws Exception
{
aboutDialog=(JFrame)swix.render(ABOUT_DESCRIPTOR);
aboutDialog.setResizable(false);
aboutDialog.setAlwaysOnTop(true);
final Toolkit toolkit=Toolkit.getDefaultToolkit();
final Dimension screenSize=toolkit.getScreenSize();
final int x=(screenSize.width-aboutDialog.getWidth())/2;
final int y=(screenSize.height-aboutDialog.getHeight())/2;
aboutDialog.setLocation(x,y);
Stringfilename=this.getClass().getClassLoader().getResource(HTML_FILE).toString();
about_txtDescr.setContentType(CONTENT_TYPE);
about_txtDescr.setPage(new URL(filename));
}
public void initZadDialog() throws Exception
{
zadDialog=(JFrame)swix.render(ZAD_DESCRIPTOR);
zadDialog.setResizable(false);
zadDialog.setAlwaysOnTop(true);
final Toolkit toolkit=Toolkit.getDefaultToolkit();
final Dimension screenSize=toolkit.getScreenSize();
final int x=(screenSize.width-zadDialog.getWidth())/2;
final int y=(screenSize.height-zadDialog.getHeight())/2;
zadDialog.setLocation(x,y);
double ynom[]=XMLInterface.getYnom();
int uplimits[]=XMLInterface.getUplimits();
int downlimits[]=XMLInterface.getDownlimits();
SpinnerModel sm1=new SpinnerNumberModel (ynom[0],downlimits[0], uplimits[0],1);
SpinnerModel sm2=new SpinnerNumberModel (ynom[1],downlimits[1], uplimits[1],1);
spz1.setModel(sm1);
spz2.setModel(sm2);
}
public GUI()
{
try
{
initAboutDialog();
initMainDialog();
initPlotDialog();
initZadDialog();
mainDialog.setVisible(true);
javax.swing.Timer t= new javax.swing.Timer(1000,new ClockListener());
t.start();
logEvent("Управління","процесзапущено");
logEvent("Управління","Контролервключено");
}
catch(Exception e)
{
System.out.println ("error in gui");
e.printStackTrace();
}
}
public void initPlotDialog()throws Exception
{
int uplimits[]=XMLInterface.getUplimits();
int downlimits[]=XMLInterface.getDownlimits();
graphDialog=(JFrame) swix.render(GRAPH_DESCRIPTOR);
graphDialog.setContentPane(Graph.createGraphPanel());//(downlimits[0], uplimits[0],downlimits[1], uplimits[1]));
}
public Action AC_MANUAL=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
if(!c.getManual())
logEvent("Управление","Контроллеротключен");
else
logEvent("Управление","Контроллер включен");
c.setManual(!c.getManual());
if(c.getManual())
cmdChangeMode.setText("включитьконтроллер");
else
cmdChangeMode.setText("отключитьконтроллер");
}
};
public Action AC_CLOSE_ABOUTDIALOG=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
aboutDialog.setVisible(false);
}
};
public Action AC_ABOUT=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
aboutDialog.setVisible(true);
}
};
public Action AC_GRAPH=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
graphDialog.setVisible(true);
}
};
public Action AC_ZAD=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
zadDialog.setVisible(true);
}
};
public Action AC_WORK=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
if(c.getWork()) logEvent ("Управлiння","Процесзупинений");
else logEvent("Управлiння","Процес запущено");
c.setWork(!c.getWork());
}
};
public Action AC_SETZ=new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
double ynom[]=XMLInterface.getYnom();
c.setZ(Double.valueOf(spz1.getValue().toString())-ynom[0],0);
c.setZ(Double.valueOf(spz2.getValue().toString())-ynom[1],1);
zadDialog.setVisible(false);
}
};
class ClockListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(c.getWork())
{
double ynom[]=XMLInterface.getYnom();
double unom[]=XMLInterface.getUnom();
int uplimits[]=XMLInterface.getUplimits();
int downlimits[]=XMLInterface.getDownlimits();
lby1.setText(String.format("%.2f",c.getY(0)+ynom[0]));
lby2.setText(String.format("%.2f",c.getY(1)+ynom[1]));
pry1.setMaximum(uplimits[0]);
pry1.setMinimum(downlimits[0]);
pry1.setValue((int)(c.getY(0)+ynom[0]));
pry2.setMaximum(uplimits[1]);
pry2.setMinimum(downlimits[1]);
pry2.setValue((int)(c.getY(1)+ynom[1]));
Graph.addY(c.getY(0)+ynom[0],c.getY(1)+ynom[1]);
if((c.getY(0)+ynom[0])>uplimits[0]||(c.getY(0)+ynom[0])<downlimits[0])
{
if(pry1.isVisible())logEvent("Аварийное","Параметр у1 вышел за регламент");
pry1.setVisible(false);
lby1.setForeground(Color.red);
}
else
{
if(!pry1.isVisible())logEvent("Аварийное","Параметру1 вернулсяврегламент");
pry1.setVisible(true);
lby1.setForeground(Color.black);
pry1.setMaximum(uplimits[0]);
pry1.setMinimum(downlimits[0]);
pry1.setValue((int)(c.getY(0)+ynom[0]));
}
if(Controller.getManual())
{
spu1.setEnabled(false);
c.setU(Double.valueOf(spu1.getValue().toString())-unom[0],0);
spu2.setEnabled(false);
c.setU(Double.valueOf(spu2.getValue().toString())-unom[1],1);
}
else
{
spu1.setEnabled(false);
spu2.setEnabled(false);
spu1.setValue(c.getU(0)+unom[0]);
spu2.setValue(c.getU(1)+unom[1]);
}
}
}
}
}