Skip to content
Snippets Groups Projects
Commit 5d20925c authored by ddnguyen's avatar ddnguyen
Browse files

add GUI

parent 89281ffe
No related branches found
No related tags found
No related merge requests found
Pipeline #18822 failed
package elevator.GUI;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JPanel;
import elevator.MainElevator;
public class Building extends JPanel
{
/* private Timer timer;
private boolean isRunning;
private int counter;
private int timeElapsedInSecs;*/
private Elevator elevator1;
// private Elevator elevator2;
private List<Floor> floors;
private static int nbFloor;
// private Random random;
public Building( int nbFloor){
this.nbFloor = nbFloor + 1;
elevator1 = new Elevator(100, MainElevator.getPanelHeight()-heightFloor());
floors = Collections.synchronizedList(new ArrayList());
for (int i = 0; i <= nbFloor; ++i)
floors.add(new Floor(100, 200, 250, 350, heightFloor() * (nbFloor-i), 750, i));
}
public static int getNbFloor(){
return nbFloor;
}
public static int heightFloor(){
return MainElevator.getPanelHeight()/getNbFloor();
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
this.setBackground(Color.WHITE);
for (Floor floor : floors)
{
floor.draw(g);
}
elevator1.draw(g);
}
}
package elevator.GUI;
import java.awt.Color;
import java.awt.Graphics;
public class Elevator
{
private int xAxis;
private int yAxis;
private int width;
private int height;
private int doorWidth;
private int floor;
public Elevator(int xAxis, int yAxis)
{
this(xAxis, yAxis, 100, Building.heightFloor(), 0);
}
public Elevator(int xAxis, int yAxis, int width, int height, int floor)
{
this.xAxis = xAxis;
this.yAxis = yAxis;
this.width = width;
this.height = height;
this.doorWidth = width / 2;
this.floor = floor;
}
public void draw(Graphics g)
{
g.drawRect(xAxis, yAxis, width, height);
g.setColor(Color.WHITE);
g.fillRect(xAxis, yAxis, doorWidth, height);
g.fillRect(xAxis + width - doorWidth, yAxis, doorWidth, height);
g.setColor(Color.BLACK);
g.drawRect(xAxis, yAxis, doorWidth, height);
g.drawRect(xAxis + width - doorWidth, yAxis, doorWidth, height);
}
public int getFloor()
{
return this.floor;
}
public int getX()
{
return this.xAxis;
}
public int getY()
{
return this.yAxis;
}
}
\ No newline at end of file
package elevator.GUI;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Floor extends JPanel {
private int x1;
private int x2;
private int x3;
private int x4;
private int y;
private int l;
private int floor;
public Floor(int x1, int x2, int x3, int x4, int y, int l, int floor) {
this.x1 = x1;
this.x2 = x2;
this.x3 = x3;
this.x4 = x4;
this.y = y;
this.l = l;
this.floor = floor;
setLayout(null); // Use null layout for absolute positioning
}
public void draw(Graphics g) {
g.drawLine(0, y, x1, y);
g.drawLine(x2, y, x3, y);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(222, y, 8, 10);
g.drawLine(x1, y, x2, y);
g.setColor(Color.BLACK);
g.drawString("Floor " + floor, 30, y - 2);
}
public int getFloor() {
return this.floor;
}
}
package elevator;
import elevator.Scheduler.Direction;
import elevatorSimulator.ElevatorSimulator;
import elevatorSimulator.IElevator;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import elevator.GUI.Building;
public class MainElevator {
private static final int PANEL_WIDTH = 1000;
private static final int PANEL_HEIGHT = 900;
public static void main(String args[]) {
IElevator e = new ElevatorSimulator(5, true);
Scheduler s = new Scheduler();
IControlCommand c = new CommandController(s,e,5);
private JFrame frame;
private JPanel panel1 = new JPanel(null);
private JPanel buttonsPanel;
// private JButton btnStart;
// private JButton btnStop;
private Building building;
private JButton[] floorButtons;
private JPanel[] panelList;
StopConditionListener stopConditionListener = () -> {
return ((CommandController) c).getCurrentDirection() == Direction.DOWN && ((CommandController) c).getCurrentPosition() == 0;
};
public MainElevator()
{
building = new Building(5);
building.setBounds(0, 0, 260, getPanelHeight());
((CommandController) c).setStopConditionListener(stopConditionListener);
buttonsPanel = new JPanel(new GridLayout(2,1,10,10));
JPanel numFloor = new JPanel();
if (Building.getNbFloor()%2 == 0){
numFloor = new JPanel(new GridLayout((Building.getNbFloor()/2), 2, 2, 2));
}else {
numFloor = new JPanel(new GridLayout((Building.getNbFloor()/2) +1, 2, 2, 2));
}
Thread controlThread = new Thread((Runnable) c);
controlThread.start();
c.registerCabinRequest(5);
buttonsPanel.setBounds(500, 100, 200, 250); // Đặt vị trí và kích thước của panel2
floorButtons = new JButton[Building.getNbFloor()];
for (int i = 0; i < Building.getNbFloor(); i++) {
floorButtons[i] = new JButton(String.valueOf(i));
floorButtons[i].setBackground(new java.awt.Color(255, 255, 255));
numFloor.add(floorButtons[i]);
while(true) {
if( ((CommandController) c).getCurrentFloor()== 3) {
e.halt();
System.out.println("halting...");
System.out.println(e.getState());
break;
}
//emergency panel
JPanel emergencyPanel = new JPanel(new GridLayout(2, 1, 10, 10));
JButton haltButton = new JButton("HALT");
JButton resetButton = new JButton("RESET");
emergencyPanel.add(haltButton);
emergencyPanel.add(resetButton);
buttonsPanel.add(numFloor);
buttonsPanel.add(emergencyPanel);
panelList = new JPanel[Building.getNbFloor()];
for (int k = 0; k <= Building.getNbFloor(); k++) {
if (k < panelList.length) {
panelList[k] = new JPanel();
panelList[k].setLayout(new GridLayout(1, 2, 5, 5));
JButton upButton = new JButton("UP");
JButton downButton = new JButton("DOWN");
if (k == 0) {
panelList[k].add(upButton);
panel1.add(panelList[k]);
} else if (k== Building.getNbFloor() -1){
panelList[k].add(downButton);
panel1.add(panelList[k]);
}
panelList[k].add(upButton);
panelList[k].add(downButton);
panel1.add(panelList[k]);
try {
Thread.sleep(1000);
e.reset();
controlThread.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
panelList[k].setBounds(262, (Building.heightFloor() * (Building.getNbFloor() - k)) + Building.heightFloor() / 2, 150, Building.heightFloor() / 4);
}
}
panel1.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
panel1.add(building);
panel1.add(buttonsPanel);
System.out.println(((ElevatorSimulator) e).getEvents());
frame = new JFrame("Elevator Simulator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setAlwaysOnTop(true);
frame.setResizable(false);
frame.add(panel1);
frame.pack();
frame.setVisible(true);
}
public static int getPanelWidth() {
return PANEL_WIDTH;
}
public static int getPanelHeight() {
return PANEL_HEIGHT;
}
public static void main(String[] args)
{
MainElevator main = new MainElevator();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment