Simulation einer Verkehrsampel (Java): Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springenK |
K |
||
Zeile 1: | Zeile 1: | ||
[[Datei:Ampelsimulation.png|mini|Bildschirmausgabe]] | [[Datei:Ampelsimulation.png|mini|Bildschirmausgabe]] | ||
Die Klasse ''Ampel.java'' baut unserer Projekt in einem Fenster zusammen und startet es. | Die Klasse ''Ampel.java'' baut unserer Projekt in einem Fenster zusammen und startet es. | ||
− | < | + | <syntaxhighlight lang="java"> |
import javax.swing.*; | import javax.swing.*; | ||
Zeile 33: | Zeile 33: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
''Tactable.java'' ist ein Interface, das Klassen implementieren müssen, wenn sie über den Wechsel der Ampelphasen informiert werden möchten. | ''Tactable.java'' ist ein Interface, das Klassen implementieren müssen, wenn sie über den Wechsel der Ampelphasen informiert werden möchten. | ||
− | < | + | <syntaxhighlight lang="java"> |
/** | /** | ||
* @author Gernot Segieth | * @author Gernot Segieth | ||
Zeile 43: | Zeile 43: | ||
public void next(); | public void next(); | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
''AmpelPanel.java'' beschreibt die virtuelle Hardware unserer Ampel. Sie zeichnet die Ampel und die Ampelphasen. | ''AmpelPanel.java'' beschreibt die virtuelle Hardware unserer Ampel. Sie zeichnet die Ampel und die Ampelphasen. | ||
− | < | + | <syntaxhighlight lang="java"> |
import java.awt.*; | import java.awt.*; | ||
import java.awt.event.*; | import java.awt.event.*; | ||
Zeile 109: | Zeile 109: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
''Tact.java'' beschreibt Takte bzw. Wartezeiten, die eine Ampelschaltung einer Verkehrsampel durchläuft. | ''Tact.java'' beschreibt Takte bzw. Wartezeiten, die eine Ampelschaltung einer Verkehrsampel durchläuft. | ||
− | < | + | <syntaxhighlight lang="java"> |
/** | /** | ||
* @author Gernot Segieth | * @author Gernot Segieth | ||
Zeile 146: | Zeile 146: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
[[Kategorie: Java]] | [[Kategorie: Java]] | ||
[[Kategorie: Java-Codeschnipsel]] | [[Kategorie: Java-Codeschnipsel]] |
Version vom 9. März 2018, 18:55 Uhr
Die Klasse Ampel.java baut unserer Projekt in einem Fenster zusammen und startet es.
import javax.swing.*;
/**
* @author Gernot Segieth
*/
public class Ampel {
public Ampel() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
System.err.println(e);
}
JFrame f = new JFrame("Ampel-Simulation");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new AmpelPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Ampel();
}
});
}
}
Tactable.java ist ein Interface, das Klassen implementieren müssen, wenn sie über den Wechsel der Ampelphasen informiert werden möchten.
/**
* @author Gernot Segieth
*/
public interface Tactable {
public void next();
}
AmpelPanel.java beschreibt die virtuelle Hardware unserer Ampel. Sie zeichnet die Ampel und die Ampelphasen.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* @author Gernot Segieth
*/
public class AmpelPanel extends JPanel implements Tactable {
private int phase;
public AmpelPanel() {
setBackground(Color.WHITE);
Tact tact = new Tact(this);
tact.start();
}
public void next() {
phase++;
repaint();
if(phase > 3) {
phase = 0;
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRoundRect(10, 10, 200, 600, 10, 10);
g.setColor(Color.DARK_GRAY);
g.fillOval(20, 20, 180, 180);
g.fillOval(20, 220, 180, 180);
g.fillOval(20, 420, 180, 180);
switch(phase) {
case 0:
g.setColor(Color.RED);
g.fillOval(20, 20, 180, 180);
break;
case 1:
g.setColor(Color.RED);
g.fillOval(20, 20, 180, 180);
g.setColor(Color.YELLOW);
g.fillOval(20, 220, 180, 180);
break;
case 2:
g.setColor(Color.GREEN);
g.fillOval(20, 420, 180, 180);
break;
case 3:
g.setColor(Color.YELLOW);
g.fillOval(20, 220, 180, 180);
break;
}
}
public Dimension getPreferredSize() {
return new Dimension(220, 620);
}
}
Tact.java beschreibt Takte bzw. Wartezeiten, die eine Ampelschaltung einer Verkehrsampel durchläuft.
/**
* @author Gernot Segieth
*/
public class Tact extends Thread {
private Tactable tactable;
public Tact(Tactable tactable) {
this.tactable = tactable;
}
public void run() {
while(!isInterrupted()) {
Tact.sleep(8000);
tactable.next();
Tact.sleep(2000);
tactable.next();
Tact.sleep(10000);
tactable.next();
Tact.sleep(5000);
tactable.next();
}
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
}
catch(InterruptedException e) {
System.err.println(e);
Thread.currentThread().interrupt();
}
}
}