Pertemuan 4: Membuat Clock Display

Tugas Pertemuan 4

Nama: Farrel Aqilla Novianto

NRP: 5025241015

Kelas: Pemrograman Berorientasi Objek (A)

Source Code

Pembuatan Clock Display

Pertemuan ini membahas mengenai modularization dan abstraction yang bisa diimplementasikan dalam pembuatan Clock Display, yang membutuhkan NumberDisplay, ClockDisplay, dan Clock sebagai tampilan dari clock display yang telah dibuat.

Kode NumberDisplay.java

/**
 *
 * @author Farrel Aqilla Novianto
 */

public class NumberDisplay
{
    private int limit;
    private int value;
    
    public NumberDisplay(int rollOverLimit)
    {
        limit = rollOverLimit;
        value = 0;;
    }
    public int getValue()
    {
        return value;
    }
    public String getDisplayValue()
    {
        if(value < 10){
            return "0" + value;
        }
        else{
            return "" + value;
        }
    }
    public void setValue(int replacementValue)
    {
        if((replacementValue >= 0) && (replacementValue < limit)){
            value = replacementValue;
        }
    }
    public void increment()
    {
        value = (value + 1) % limit;
    }
}

Kode ClockDisplay.java

/**
 *
 * @author Farrel Aqilla Novianto
 */

public class NumberDisplay
{
    private int limit;
    private int value;
    
    public NumberDisplay(int rollOverLimit)
    {
        limit = rollOverLimit;
        value = 0;;
    }
    public int getValue()
    {
        return value;
    }
    public String getDisplayValue()
    {
        if(value < 10){
            return "0" + value;
        }
        else{
            return "" + value;
        }
    }
    public void setValue(int replacementValue)
    {
        if((replacementValue >= 0) && (replacementValue < limit)){
            value = replacementValue;
        }
    }
    public void increment()
    {
        value = (value + 1) % limit;
    }
}

Kode Clock.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
/**
 *
 * @author Farrel Aqilla Novianto
 */

public class Clock
{
    private JFrame frame;
    private JLabel label;
    private ClockDisplay clock;
    private boolean clockRunning = false;
    private TimerThread timerThread;

    public Clock(){
        makeFrame();
        clock = new ClockDisplay();
    }

    private void start(){
        clockRunning = true;
        timerThread = new TimerThread();
        timerThread.start();
    }
    private void stop(){
        clockRunning = false;
    }
    private void step(){
        clock.timeTick();
        label.setText(clock.getTime());
    }
    private void showAbout(){
        JOptionPane.showMessageDialog(frame, "Clock Version 1.0\n" + "Jam simpel yang dibuat oleh Farrel Aqilla Novianto", "About Clock", JOptionPane.INFORMATION_MESSAGE);
    }
    private void quit(){
        System.exit(0);
    }
    private void makeFrame(){
        frame = new JFrame("Clock");
        JPanel contentPane = (JPanel)frame.getContentPane();
        contentPane.setBorder(new EmptyBorder(1, 60, 1, 60));
        
        makeMenuBar(frame);
        contentPane.setLayout(new BorderLayout(12,12));
        
        label = new JLabel("00:00", SwingConstants.CENTER);
        Font displayFont = label.getFont().deriveFont(96.0f);
        label.setFont(displayFont);
        contentPane.add(label,BorderLayout.CENTER);
        
        JPanel toolbar = new JPanel();
        toolbar.setLayout(new GridLayout(1,0));
        
        JButton startButton = new JButton("Start");
        startButton.addActionListener(e -> start());
        toolbar.add(startButton);
        
        JButton stopButton = new JButton("Stop");
        stopButton.addActionListener(e -> stop());
        toolbar.add(stopButton);
        
        JButton stepButton = new JButton("Step");
        stepButton.addActionListener(e -> step());
        toolbar.add(stepButton);
        
        JPanel flow = new JPanel();
        flow.add(toolbar);
        
        contentPane.add(flow, BorderLayout.SOUTH);
        
        frame.pack();
        
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);
        frame.setVisible(true);        
    }
    private void makeMenuBar(JFrame frame){
        final int SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
        
        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);
        
        JMenu menu;
        JMenuItem item;
        
        menu = new JMenu("File");
        menubar.add(menu);
        
        item = new JMenuItem("About Clock...");
        item.addActionListener(e->showAbout());
        menu.add(item);
        
        menu.addSeparator();
        
        item = new JMenuItem("Quit");
        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
        item.addActionListener(e -> quit());
        menu.add(item);
    }
    class TimerThread extends Thread{
        public void run(){
            while (clockRunning){
                step();
                pause();
            }
        }
        private void pause(){
            try{
                Thread.sleep(300);
            }
            catch (InterruptedException exc){
            }
        }
    }
}

Kedua class tersebut akan digunakan dalam class Clock yang berfungsi untuk menampilkan jam yang telah dibuat. Setelah dicompile, kita dapat membuat objek clock dengan klik class Clock dan klik add new Clock() dan isi terserah nama Clock yang baru dibuat.

Beginilah tampilannya:




Komentar

Postingan populer dari blog ini

Final Project: Tetris