Traffic Light program java
hampir semua orang mengetahui apa itu lampu lalu lintas(traffic light). sering kita jumpai diperempatan, pertigaan, perlimaan, atau bahkan jalan lurus untuk memberitahukan pengendara untuk hati hati. namun bagaimana traffic light bisa bekerja. bagaimana program dari lampu lalu lintas. berikut ini akan kita bahas program dari traffic light dalam bahasa java.
terdapat beberapa class yang akan kita buat. berikut object diagram :
langsung kita masuk kedalam implementasi source code.
1. AppFrame
/**
* tampilan umum dan main project
* @author Ichsanul_aulia
* @version (2010)
*/
import java.awt.*;
import javax.swing.*;
public class AppFrame extends JFrame{
public static void main(String[] args) {
new AppFrame(10);
}
public AppFrame (int duration){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Traffic Light");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout(1,1));
frame.add(new TrafficLightPane(duration));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
2. TrafficLightPane
/**
* class lampu .
*
* @author Ichsanul_aulia
* @version (2010)
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TrafficLightPane extends JPanel {
int tick = 1;
int duration = 10;
int state = 0;
SignalPane green = new SignalPane(Color.green);
SignalPane yellow = new SignalPane(Color.yellow);
SignalPane red = new SignalPane(Color.red);
DigitPane timerDigit = new DigitPane();
public TrafficLightPane(int s){
duration = s;
setLayout(new GridLayout(4,1));
green.turnOn(false);
yellow.turnOn(false);
red.turnOn(true);
timerDigit.setValue(duration);
add(red);
add(yellow);
add(green);
add(timerDigit);
Timer timer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
int timeRemaining = duration - tick;
if (timeRemaining <= 0) {
tick = 0;
state++;
changeSignalState(state);
}
timerDigit.setValue(duration - tick);
tick++;
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
//function u/ mengubah integer menjadi boolean
private boolean changeToBool(int state){
if (state % 3 > 0 ){
return false;
} else {
return true;
}
}
// function untuk mengubah state (on/off) dari object Signal
private void changeSignalState(int state){
green.turnOn(changeToBool(state + 2));
yellow.turnOn(changeToBool(state + 1));
red.turnOn(changeToBool(state));
}
public void setDuration(int s){
duration = s;
}
}
3. SignalPane
/**
* class warna lampu.
*
* @author @ichsanul_aulia
* @version (2010)
*/
import java.awt.*;
import javax.swing.*;
class SignalPane extends JPanel{
Color on;
int radius = 50;
int border = 10;
boolean isOn;
SignalPane(Color color){
on = color;
isOn = false;
}
public void turnOn(boolean a){
isOn = a;
repaint();
}
public Dimension getPreferredSize(){
int size = (radius+border)*2;
return new Dimension( size, size );
}
protected void paintComponent(Graphics graphics){
graphics.setColor( Color.black );
graphics.fillRect(0,0,getWidth(),getHeight());
if (isOn){
graphics.setColor( on );
} else {
graphics.setColor( on.darker().darker().darker() );
}
graphics.fillOval( border,border,2*radius,2*radius );
}
}
4. DIgitPane
/**
* kelas timer.
*
* @author Ichsanul_aulia
* @version (2010)
*/
import java.awt.*;
import javax.swing.*;
public class DigitPane extends JPanel {
private int second;
public Dimension getPreferredSize(){
FontMetrics fm = getFontMetrics(getFont());
return new Dimension(fm.stringWidth("00"), fm.getHeight());
}
// function untuk mengubah nilai timer dan mengupdate tampilan
public void setValue(int newVal){
if (second != newVal) {
second = newVal;
repaint();
}
}
public int getValue(){
return second;
}
// function u/ menampilkan integer sebagai string
private String pad(int value){
return String.format("%02d", value);
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setFont(new Font("LCD", Font.PLAIN, 24));
FontMetrics fm = getFontMetrics(g.getFont());
String text = pad(getValue());
int x = (getWidth() - fm.stringWidth(text)) / 2;
int y = ((getHeight()- fm.getHeight()) / 2) + fm.getAscent();
g.drawString(text, x, y);
}
}

Komentar
Posting Komentar