Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vidpovidi_OOP.doc
Скачиваний:
21
Добавлен:
23.02.2016
Размер:
281.6 Кб
Скачать

29.Компоненти інтерфейсу користувача.

30.Використання об’єктів Timer і Date для об’єктно-орієнтованого моделювання процесів

package smallsmo;

public class TimeEndEvent {

private long time;

private String nameEvent;

public TimeEndEvent( long t, String s)

{

time = t;

nameEvent = s;

}

public long getTime()

{

return time;

}

public String getEvent()

{

return nameEvent;

}

}

package smallsmo;

import java.util.ArrayList;

import java.util.Date;

public class SMO extends smo_big

{

private long timeCurrent;

private long timeServ;

private long timeEntry;

private TimeEndEvent Ev;

private ArrayList<TimeEndEvent> ListEvent= new ArrayList<TimeEndEvent>();

public SMO(devices D, int tService)

{

super(D);

Date now = new Date();

timeCurrent = now.getTime();

timeServ = tService;

ListEvent.clear();

ListEvent.add( new TimeEndEvent(timeCurrent+timeEntry+(long)(-10+Math.random()*20),"Seize"));

}

public SMO(devices D,queue Q, int tService, int tEntry)

{

super(D,Q);

Date now = new Date();

timeCurrent = now.getTime();

timeServ = tService;

timeEntry = tEntry;

ListEvent.clear();

ListEvent.add( new TimeEndEvent(timeCurrent+timeEntry+(long)(-10+Math.random()*20),"Seize"));

}

public long getTimserv()

{

return timeServ;

}

public TimeEndEvent getTimeEndEvent()

{

return Ev;

}

@Override

public void seize()

{

super.seize();

ListEvent.add( new TimeEndEvent(timeCurrent+timeServ+(long)(-10+Math.random()*20),"Releize"));

ListEvent.add( new TimeEndEvent(timeCurrent+timeEntry+(long)(-1+Math.random()*2),"Seize"));

}

@Override

public void releize()

{

super.releize();

}

public TimeEndEvent getMinEvent()

{

TimeEndEvent a=ListEvent.get(0);

long min = a.getTime();

for (TimeEndEvent e:ListEvent)

if (e.getTime()<min)

{ min = e.getTime() ;

a = e;

}

return a;

}

public void doEvent()

{

TimeEndEvent minEvent = getMinEvent();

if(minEvent!=null)

{ ListEvent.remove(minEvent);

if(minEvent.getEvent().equalsIgnoreCase("Seize"))

this.seize();

else if(minEvent.getEvent().equalsIgnoreCase("Releize"))

this.releize();

}

else

System.out.println("Event==null");

System.out.println("TimeCurrent= "+timeCurrent+" TimeNextEvent= "+getMinEvent().getTime());

timeCurrent = getMinEvent().getTime();

}

public long getTimeNextEvent()

{

return getMinEvent().getTime();

}

}

package smallsmo;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.Timer;

public class ModelFrame extends JFrame

{private JTextArea text;

private JScrollPane scroll;

private JPanel panel;

public ModelFrame() //конструктор вікна

{

setTitle("Model SMO");

setSize(500,300);

this.setLocation(100,200);

panel = new JPanel(); //створення панелі

JButton ModelingButton = new JButton("Modeling");

JButton StopButton = new JButton("STOP");

JButton ResultsButton = new JButton("Results");

JButton ExitButton = new JButton("EXIT");

text = new JTextArea();

device[] groupD = new device[2];

for (int j=0;j<2;j++)

groupD[j] = new device();

devices D = new devices(groupD);

queueWithMax Q = new queueWithMax(0,10);

final SMO Model = new SMO(D,Q,10,2);

ModelingButton.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

Timer t = new Timer(1000,new ActionListener(){

public void actionPerformed(ActionEvent e) {

Date now = new Date();

long t= now.getTime();

text.append(" time= "+(now.getTime())+"\n");

if(Model.getTimeNextEvent()<t)

Model.doEvent();

text.append("Next event "+Model.getTimeEndEvent().getEvent()+"\n"

+" in SMO "+Model.getState()+" in devices "+Model.getDevices().getNumSeize()+" in queue "+Model.getQueue().getState()+"\n");

}

}

);

t.start();

}

}

);

StopButton.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JOptionPane.showMessageDialog(null, "Зупинити моделювання?");

}

}

);

StopButton.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JOptionPane.showMessageDialog(null, "Зупинити моделювання?");

}

}

);

ExitButton.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

JOptionPane.showMessageDialog(null, "Вихід?");

System.exit(0);

}

}

);

ResultsButton.addActionListener

(

new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

text.setText("\n Результати моделювання: \n\n\n") ;

text.append(" кількість необслугованих вимог = "+Model.getNumNeobsl()+"\n");

text.append(" кількість обслугованих вимог = "+Model.getNumObsl()+"\n");

text.append(" максимальна кількість у черзі = "+Model.getQueue().getMaxLength()+"\n");

}

}

);

panel.add(ModelingButton);

panel.add(StopButton);

panel.add(ResultsButton);

panel.add(ExitButton);

panel.add(text);

add(panel,BorderLayout.NORTH);

scroll = new JScrollPane(text);

add(scroll,BorderLayout.CENTER);

}}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]