import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.Hashtable;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ElevatorSimulator implements ChangeListener {
private Elevator elevator = new Elevator(this);
ImageIcon normalIcon = new ImageIcon(getClass().getResource(
"images/normal.png"));
ImageIcon upIcon = new ImageIcon(getClass().getResource("images/oben.png"));
ImageIcon downIcon = new ImageIcon(getClass().getResource(
"images/unten.png"));
ImageIcon icon = new ImageIcon(getClass().getResource("images/off.png"));
ImageIcon onIcon = new ImageIcon(getClass().getResource("images/on.png"));
private JFrame frame;
private JPanel lp;
private JPanel bp;
private JSlider slider;
private JLabel indicator = new JLabel(normalIcon);
private JButton[] buttons;
private JLabel[] labels;
private JMenuBar menuLeiste;
private JMenu datei;
private JMenu hilfe;
// Datei
private JMenuItem open;
private JMenuItem quit;
private JMenuItem logger;
// Hilfe
private JMenuItem info;
private JMenuItem docs;
private String[] buttonTxt = { "F7", "F6", "F5", "F4", "F3", "F2", "F1" };
private String[] labelTxt = { "7", "6", "5", "4", "3", "2", "1" };
private static int screenHeight = Toolkit.getDefaultToolkit()
.getScreenSize().height;
private static int screenWidth = Toolkit.getDefaultToolkit()
.getScreenSize().width;
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider) e.getSource();
int delay = (int) source.getValue();
elevator.setTimerDelay(delay);
}
private void createGui(int width, int height) {
menuLeiste = new JMenuBar();
MenuItemListener mListener = new MenuItemListener();
datei = new JMenu("Datei");
datei.addActionListener(mListener);
hilfe = new JMenu("Hilfe");
hilfe.addActionListener(mListener);
open = new JMenuItem("Neues Fenster", new ImageIcon(getClass()
.getResource("images/window.png")));
open.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));
open.addActionListener(mListener);
quit = new JMenuItem("Beenden", new ImageIcon(getClass().getResource(
"images/quit.png")));
quit.addActionListener(mListener);
quit.setAccelerator(KeyStroke.getKeyStroke('Q', Event.CTRL_MASK));
logger = new JMenuItem("Status loggen", new ImageIcon(getClass()
.getResource("images/log.png")));
logger.addActionListener(mListener);
logger.setAccelerator(KeyStroke.getKeyStroke('L', Event.CTRL_MASK));
info = new JMenuItem("Info", new ImageIcon(getClass().getResource(
"images/info.png")));
info.addActionListener(mListener);
info.setAccelerator(KeyStroke.getKeyStroke('I', Event.CTRL_MASK));
docs = new JMenuItem("Dokumentation", new ImageIcon(getClass()
.getResource("images/doc.png")));
docs.addActionListener(mListener);
docs.setAccelerator(KeyStroke.getKeyStroke('D', Event.CTRL_MASK));
datei.add(open);
datei.add(logger);
datei.addSeparator();
datei.add(quit);
hilfe.add(info);
hilfe.add(docs);
menuLeiste.add(datei);
menuLeiste.add(hilfe);
bp = new JPanel();
buttons = new JButton[7];
labels = new JLabel[7];
lp = new JPanel();
lp.add(indicator);
ButtonListener bListener = new ButtonListener();
for (int i = 0; i < 7; i++) {
buttons[i] = new JButton(buttonTxt[i], icon);
buttons[i].setEnabled(true);
buttons[i].addActionListener(bListener);
buttons[i].setActionCommand(String.valueOf(i));
buttons[i].setBackground(Color.CYAN);
bp.add(buttons[i]);
labels[i] = new JLabel(labelTxt[i]);
labels[i].setHorizontalAlignment(SwingConstants.CENTER);
labels[i].setPreferredSize(new Dimension(22, 21));
lp.add(labels[i]);
}
bp.setLayout(new GridLayout(7, 1));
bp.setBackground(Color.YELLOW);
lp.setBorder(BorderFactory.createEtchedBorder());
lp.add(Box.createVerticalGlue());
lp.setLayout(new FlowLayout());
lp.setBackground(Color.yellow);
labels[0].setOpaque(true);
labels[0].setBackground(Color.red);
slider = new JSlider(JSlider.VERTICAL, 0, 100, 50);
slider.setMinorTickSpacing(4);
slider.setMajorTickSpacing(20);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.addChangeListener(this);
slider.setBackground(Color.yellow);
slider.setOpaque(true);
Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
labelTable.put(new Integer(0), new JLabel("Fast"));
labelTable.put(new Integer(100), new JLabel("Slow"));
slider.setLabelTable(labelTable);
frame = new JFrame("Elevator Simulation");
frame.setResizable(false);
frame.add(menuLeiste, BorderLayout.NORTH);
frame.add(bp, BorderLayout.EAST);
frame.add(lp, BorderLayout.SOUTH);
frame.add(slider, BorderLayout.WEST);
frame.add(elevator, BorderLayout.CENTER);
frame.setSize(300, 500);
frame.setLocation(width, height);
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
ElevatorSimulator es = new ElevatorSimulator();
es.createGui(screenWidth / 4, screenHeight / 4);
}
public void setIndicatorIcon(String s) {
if (s.equals("up")) {
indicator.setIcon(upIcon);
}
if (s.equals("down")) {
indicator.setIcon(downIcon);
}
if (s.equals("normal")) {
indicator.setIcon(normalIcon);
}
}
public void setButtonIcon(String s, int btnIndex) {
if (s.equals("off")) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].setIcon(icon);
}
} else if (s.equals("on")) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].setIcon(icon);
}
buttons[btnIndex].setIcon(onIcon);
}
}
public void setMarker(int index) {
for (int i = 0; i < labels.length; i++) {
labels[i].setBackground(Color.YELLOW);
}
labels[index].setOpaque(true);
labels[index].setBackground(Color.RED);
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (elevator.isMoving() == false) {
int in = Integer.parseInt(e.getActionCommand());
int floor = 7 - in;
setButtonIcon("on", in);
elevator.move(floor);
}
}
}
class MenuItemListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == open) {
ElevatorSimulator eSimulator = new ElevatorSimulator();
eSimulator.createGui(screenWidth / 2, screenHeight / 4);
}
if (e.getSource() == quit) {
System.exit(0);
}
if (e.getSource() == info) {
JOptionPane.showMessageDialog(frame,
"Aufzug Simulator\nRuderer1993");
}
if (e.getSource() == docs) {
URL url = getClass().getClassLoader()
.getResource("doc/doc.pdf");
String absFile = url.getFile();
new JPanelDemo(absFile);
}
if (e.getSource() == logger) {
}
}
}
}