initial commit

This commit is contained in:
cyril-colin 2019-10-02 22:08:43 +02:00
commit aa0b3a6bb4
8 changed files with 231 additions and 0 deletions

1
MANIFEST.MF Normal file
View File

@ -0,0 +1 @@
Main-Class: ElevatorApplication

12
Makefile Normal file
View File

@ -0,0 +1,12 @@
all: build assemble
.PHONY: build
build:
mkdir -p build
javac -Xlint src/*.java -d build
assemble:
cd build/; jar cvmf ../MANIFEST.MF ../Elevator.jar *.class
clean:
-rm build/*.class

5
src/Direction.java Normal file
View File

@ -0,0 +1,5 @@
public enum Direction {
NONE,
UP,
DOWN,
}

70
src/Elevator.java Normal file
View File

@ -0,0 +1,70 @@
public class Elevator {
private int currentFloor = 0;
private boolean betweenFloors = false; /* Between currentFloor and the one above it. */
private Direction direction = Direction.NONE;
private boolean stoppingNextFloor = false;
private boolean emergency = false;
public Elevator(int currentFloor) {
this.currentFloor = currentFloor;
}
public void goUp() {
if (emergency) return;
stoppingNextFloor = false;
direction = Direction.UP;
}
public void goDown() {
if (emergency) return;
stoppingNextFloor = false;
direction = Direction.DOWN;
}
public void stopElevator() {
direction = Direction.NONE;
}
public void stopNextFloor() {
stoppingNextFloor = true;
}
public void emergencyStop() {
emergency = true;
direction = Direction.NONE;
}
public void cancelEmergency() {
emergency = false;
}
public void move() {
if (emergency) return;
switch (direction) {
case DOWN:
/* Go halfway below. */
if (!betweenFloors) currentFloor--;
betweenFloors = !betweenFloors;
break;
case UP:
/* Go halfway above. */
if (betweenFloors) currentFloor++;
betweenFloors = !betweenFloors;
break;
default:
break;
}
}
public int getCurrentFloor() {
return currentFloor;
}
public boolean getBetweenFloors() {
return betweenFloors;
}
public Direction getDirection() {
return direction;
}
}

View File

@ -0,0 +1,53 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ElevatorApplication implements ActionListener {
private ElevatorCanvas canvas;
@Override
public void actionPerformed(ActionEvent e) {
canvas.setElevatorY((canvas.getElevatorY() + 1) % canvas.getHeight());
}
private void createAndShowGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = frame.getContentPane();
pane.setLayout(new BoxLayout(pane, BoxLayout.LINE_AXIS));
pane.add(Box.createHorizontalGlue());
canvas = new ElevatorCanvas();
canvas.setAlignmentY(Component.TOP_ALIGNMENT);
pane.add(canvas);
FloorPanels fp = new FloorPanels(5);
fp.setAlignmentY(Component.TOP_ALIGNMENT);
pane.add(fp);
pane.add(Box.createRigidArea(new Dimension(20, 0)));
ElevatorPanel elevatorPanel = new ElevatorPanel(5);
elevatorPanel.setAlignmentY(Component.TOP_ALIGNMENT);
pane.add(elevatorPanel);
pane.add(Box.createHorizontalGlue());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
ElevatorApplication app = new ElevatorApplication();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
app.createAndShowGUI();
Timer t = new Timer(16, app);
t.start();
}
});
}
}

41
src/ElevatorCanvas.java Normal file
View File

@ -0,0 +1,41 @@
import javax.swing.*;
import java.awt.*;
class ElevatorCanvas extends JPanel {
private final static int WIDTH = 40;
private final static int HEIGHT = 50;
private final static Color COLOR = Color.PINK;
private final static Dimension DIMENSIONS = new Dimension(WIDTH, 200);
private int y = 0;
@Override
public Dimension getMinimumSize() {
return DIMENSIONS;
}
@Override
public Dimension getPreferredSize() {
return DIMENSIONS;
}
@Override
public Dimension getMaximumSize() {
return DIMENSIONS;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(COLOR);
g.fillRect(0, y, WIDTH, HEIGHT);
}
public void setElevatorY(int y) {
this.y = y;
repaint();
}
public int getElevatorY() {
return y;
}
}

25
src/ElevatorPanel.java Normal file
View File

@ -0,0 +1,25 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ElevatorPanel extends JPanel {
private JButton emergencyStop = new JButton("Emergency stop.");
private JButton[] buttons;
public ElevatorPanel(int nbFloors) {
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
this.add(new JLabel("Elevator panel."));
buttons = new JButton[nbFloors];
for (int i = 0; i < nbFloors; i++) {
buttons[i] = new JButton("" + i);
this.add(buttons[i]);
}
add(emergencyStop);
}
public void addEmergencyStopListener(ActionListener l) {
emergencyStop.addActionListener(l);
}
}

24
src/FloorPanels.java Normal file
View File

@ -0,0 +1,24 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class FloorPanels extends JPanel {
private int nbFloors;
private JPanel[] floors;
public FloorPanels(int nbFloors) {
this.nbFloors = nbFloors;
floors = new JPanel[nbFloors];
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
this.add(new JLabel("Call."));
for (int i = 0; i < nbFloors; i++) {
floors[i] = new JPanel();
floors[i].setLayout(new BoxLayout(floors[i], BoxLayout.LINE_AXIS));
floors[i].add(new JLabel("" + (i + 1)));
floors[i].add(new JButton(""));
floors[i].add(new JButton(""));
this.add(floors[i]);
}
}
}