# Hilfe per Skype, Chat ?



## Ruderer1993 (27. Dez 2011)

Hallo, ich muss nach den Ferien ein kleines Projekt abgeben. Das Projekt ist auch fast fertig, nur eine kleine Funktion schaffe ich nicht zu implementieren. Dies ist wahrscheinlich dem bisher grausamen Code geschuldet(tausende if Abfragen und static Variablen). Mir ist selber klar das mein Code nicht wirklich toll ist, auch wenn es funktioniert und das es so nur schwerer wird neue Funktionen, bzw die eine ausstehende einzubauen. Da ich den Code aber nicht hier rein stellen will, weil ich das Projekt wie gesagt noch abgeben muss, aber mal dringend Hilfe bräuchte um die Funktion einzubauen, bzw den Code zu optimieren, wäre es ideal wenn mir jemand z.B über Skype helfen könnte. Ich weiß vermutlich macht das hier keiner von euch ohne Geld, aber fragen kostet ja nichts. Also ich könnte euch dafür leider nicht entschädigen. 
Falls doch jemand vielleicht Zeit für mich findet, wäre das natürlich genial. Schreibt mich dann doch einfach über eine PN an.

Vielen Dank und geht nicht zu hart mit mir ins Gericht in den weiteren Posts


----------



## Marcinek (27. Dez 2011)

Hallo,

umsonst wird es keine rmachen. Da musst du schon hier deine Probeleme ausbreiten.

Gruß

Martin


----------



## Ruderer1993 (27. Dez 2011)

Ja ich möchte das ja auch nicht unbedingt alles hingeschrieben bekommen, sondern auf den richtigen Weg gebracht werden. 
Es hat sich auch übrigens ein überaus hilfsbereites Mitglied dieses Forums gefunden, der mir im Moment  ein wenig hilft.


----------



## Ruderer1993 (31. Dez 2011)

Ok, da ich noch nicht sonderlich weitergekommen bin, poste ich mal meinen bisherigen Code:

Gui:

```
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) {

			}
		}
	}
}
```


Logik & Zeichnen:

```
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

public class Elevator extends JPanel {

	private boolean isUp;
	private int numberFloors = 7;
	private int destinationFloor = 0;
	private int currentFloor = 7;
	private int width = 30;
	private int height;
	private int x = 50;
	private int currentY = 0;
	private int dy = 2;
	private boolean isMoving = false;

	private int doorx = 1;
	private boolean open = false;
	private Timer timer = new Timer(50, new Listener());

	private ElevatorSimulator es;


	public Elevator(ElevatorSimulator es) {
		this.es = es;
		setBackground(Color.yellow);
		timer.setInitialDelay(50);
	}
	

	public void setColor(Color color) {
		setForeground(color);
	}

	public void move(int toFloor) {
		destinationFloor = toFloor;
		move();
	}

	private void move() {

		if (destinationFloor > currentFloor) {
			isUp = true;
		} else {
			isUp = false;
		}
		timer.start();

	}
	
	public boolean isMoving() {
	    if(isMoving) {
	        return true;
	       }
	       else return false;
	   }
	   
	 public void setTimerDelay(int delay) {
	     timer.setDelay(delay);
	   }

	class Listener implements ActionListener {
		public void actionPerformed(ActionEvent e) {

			isMoving = true;
			if (currentY > 351) {
				es.setMarker(6);

			} else if (currentY <= 350 && currentY > 292) {
				es.setMarker(5);

			} else if (currentY <= 291 && currentY > 232) {
				es.setMarker(4);

			} else if (currentY <= 231 && currentY > 172) {
				es.setMarker(3);

			} else if (currentY <= 171 && currentY > 111) {
				es.setMarker(2);
			} else if (currentY <= 110 && currentY > 51) {
				es.setMarker(1);

			} else if (currentY <= 50 && currentY > 0) {
				es.setMarker(0);

			}


			if (isUp) {

				es.setIndicatorIcon("up");

				if (currentFloor < destinationFloor) {
					open = true;
					doorx = doorx - 1;

					if (doorx == 0) {
						currentY = currentY - dy;
						doorx = doorx + 1;
					}
					repaint();

				} else {
					isMoving = false;


					es.setIndicatorIcon("normal");
					es.setButtonIcon("off", -1);
			


				
					open = true;

					if (doorx < 30) {
						doorx = doorx + 1;
					}
					repaint();
				}
			}

			else {

				es.setIndicatorIcon("down");

				if (currentFloor > destinationFloor) {
					open = true;
					doorx = doorx - 1;

					if (doorx == 0) {
						doorx = doorx + 1;
						currentY = currentY + dy;
					}
					repaint();
				} else if (currentFloor == destinationFloor) {
					open = true;
					doorx = doorx - 1;

					if (doorx == 0) {
						doorx = doorx + 1;
						currentY = currentY + dy;
					}
					repaint();
				} else {


					es.setIndicatorIcon("normal");
					es.setButtonIcon("off", -1);
				
				
					open = true;
					isMoving = false;
					
					

					if (doorx < 30) {
						doorx = doorx + 1;
					}
					repaint();
				}
			}
			        
		}

	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		height = getHeight() / numberFloors;
		currentFloor = (int) (numberFloors - numberFloors
				* ((double) currentY / getHeight()));

		g.setColor(Color.orange);
		int y = getHeight();
		g.fillRect(x - 5, 0, width + 10, y);
		g.setColor(Color.DARK_GRAY);
		g.fillRect(x + 12, 0, 3, currentY + 5);

		g.setColor(Color.GRAY);
		g.fillRect(x, currentY + 5, width, height - 5);
		g.setColor(Color.BLACK);
		g.fillRect(50, currentY + 5, 2, height - 5);

		if (open) {
			g.fillRect(50, currentY + 5, doorx, height - 5);
		}
		open = false;

	}

}
```

Ok, ich weiß das ist bei weitem kein schöner code, aber ich bin ja auch noch am lernen und das ich das überhaupt hinbekommen habe bis hierhin ist für mich schon gut. Falls ihr das Programm starten wollt um es euch anzusehen lege ich noch im Anhang eine .jar bereit, damit ihr die Bilder etc habt bzw es eben ausführen könnt.

So aber nun zu meinem Problem:
Ich möchte gerne das der Aufzug auch mehrere Aufträge entgegen nehmen kann. Also ich drücke z.B auf die 5 .. er fährt zu Flur 5. Wenn ich jetzt während der Fahrt auf 3 und 2 klicke soll er danach zu Flur 3 und 2 fahren. Im Moment nimmt er gar keine Aufträge während dem fahren an (isMoving boolean) aber wenn ich die boolean Variable jetzt weglassen würde wäre das Problem das er sofort dort zu Flur 3 fahren würde ohne an 5 zu halten. 

Verständlich mein Problem ?

Vielleicht macht sich ja jemand die Mühe meinen Code durchzuschauen, wäre wirklich toll. Bei  Nachfragen weil es jetzt nicht kommentiert ist, antworte ich natürlich..

Vielen Dank

EDIT: Jar ist zu groß daher hier hochgeladen:
Droplr&bull;Aufzug.jar


----------



## Ruderer1993 (31. Dez 2011)

/push
Hm kann mir keiner helfen ?


----------

