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 : 






kemudian ada tampilan dari gambar class overview bluej:


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);  
   }      
 }    
 

hasil copile :



Komentar

Postingan populer dari blog ini

Aplikasi Support System