Skip to main content

Java Clock Display

Pada post kali ini, kami ingin mendemonstrasikan sebuah program Clock Display, yaitu sebuah tampilan jam digital sederhana. Program ini ditulis menggunakan bahasa pemrograman Java. Tampilan jam ditunjukkan dalam format 24 jam dengan gaya Eropa. Dan jam digital ditampilkan dalam satuan jam dan menit.

Clock Display

Berikut adalah diagram Clock Display.


The NumberDisplay class

Kelas NumberDisplay merepresentasikan tampilan angka digital yang dapat menampungnilai dari nol sampai batas tertentu. Batas dapat ditentukan saat membuat display. Saat mencapai limit, tampilan otomatis berputar ke nol kembali.

Code 3.3 Implementation of the NumberDisplay class

/**
 * class NumberDisplay merepresentasikan tampilan angka digital yang dapat menampung
 * nilai dari nol sampai batas tertentu. Batas dapat ditentukan saat membuat display.
 * Nilai berkisar dari nol (inklusif) sampai batas-1. Jika digunakan, misalnya, untuk
 * detik pada sebuah jam digital, batasnya adalah 60, menghasilkan nilai display dari
 * 0 sampai 59. Saat bertambah, tampilan otomatis berputar ke nol saat mencapai limit.
 *
 * @author Ramadhan Arif Hardijansyah
 * @version 0.1 17 October 2020
 */
public class NumberDisplay
{
    private int limit;
    private int value;

    /**
     * Konstruktor untuk objek dari class NumberDisplay.
     * Menetapkan limit di mana display berputar kembali ke nol.
     */
    public NumberDisplay(int rollOverLimit)
    {
        limit = rollOverLimit;
        value = 0;
    }

    /**
     * Mengembalikan nilai (value) saat ini.
     */
    public int getValue()
    {
        return value;
    }

    /**
     * Mengembalikan nilai display (yaitu, nilai saat ini sebagai dua digit String.
     * Jika nilainya kurang dari sepuluh, maka akan ditambahkan angka nol di depan.
     */
    public String getDisplayValue()
    {
        if(value < 10) {
            return "0" + value;
        }
        else {
            return "" + value;
        }
    }

    /**
     * Menyetel nilai display ke nilai baru yang ditentukan. Jika nilai baru
     * kurang dari nol atau melebihi batas, jangan melakukan apa pun.
     */
    public void setValue(int replacementValue)
    {
        if((replacementValue >= 0) && (replacementValue < limit)) {
            value = replacementValue;
        }
    }

    /**
     * Menaikkan nilai display sebanyak satu, berputar ke nol jika
     * batasnya tercapai.
     */
    public void increment()
    {
        value = (value + 1) % limit;
    }
}

The ClockDisplay class

Kelas ClockDisplay mengimplementasikan sebuah tampilan jam digital untuk waktu 24 jam bergaya Eropa. Jam menunjukkan satuan jam dan menit. Kisaran jam adalah 00:00 (tengah malam) hingga 23:59 (satu menit sebelum tengah malam).

Code 3.3 Implementation of the ClockDisplay class


/**
 * class ClockDisplay mengimplementasikan sebuah tampilan jam digital untuk
 * waktu 24 jam bergaya Eropa. Jam menunjukkan satuan jam dan menit.
 * Kisaran jam adalah 00:00 (tengah malam) hingga 23:59 (satu menit sebelum
 * tengah malam).
 * 
 * Tampilan jam menerima "ticks" (melalui method timeTick) setiap menit
 * dan bereaksi dengan menaikkan display. Ini dilakukan dengan mode jam biasa:
 * satuan jam bertambah saat satuan menit berputar ke nol.
 *
 * @author Ramadhan Arif Hardijansyah
 * @version 0.1 17 October 2020
 */
public class ClockDisplay
{
    private NumberDisplay hours;
    private NumberDisplay minutes;
    private String displayString;    // mensimulasikan tampilan sebenarnya
    
    /**
     * Konstruktor untuk objek ClockDisplay. Konstruktor ini 
     * membuat jam baru yang di-set pada 00:00.
     */
    public ClockDisplay()
    {
        hours = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        updateDisplay();
    }

    /**
     * Konstruktor untuk objek ClockDisplay. Konstruktor ini 
     * membuat jam baru yang diatur pada waktu yang ditentukan oleh 
     * parameter. 
     */
    public ClockDisplay(int hour, int minute)
    {
        hours = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        setTime(hour, minute);
    }

    /**
     * Method ini harus dipanggil sekali setiap menit - ini membuat
     * tampilan jam berjalan satu menit kedepan.
     */
    public void timeTick()
    {
        minutes.increment();
        if(minutes.getValue() == 0) {  // it just rolled over!
            hours.increment();
        }
        updateDisplay();
    }

    /**
     * Setel waktu tampilan ke jam dan menit yang ditentukan.
     */
    public void setTime(int hour, int minute)
    {
        hours.setValue(hour);
        minutes.setValue(minute);
        updateDisplay();
    }

    /**
     * Mengembalikan waktu saat ini dari display dalam format HH: MM.
     */
    public String getTime()
    {
        return displayString;
    }
    
    /**
     * Update string internal yang merepresentasikan tampilan.
     */
    private void updateDisplay()
    {
        int hour = hours.getValue();
        String suffix;
        
        if (hour >= 12) {
            suffix = "pm";
        }
        else  {
            suffix = "am";
        }
        
        if (hour >= 12) {
            hour -= 12;
        }
        
        if (hour == 0) {
            hour = 12;
        }
        
        displayString = hour + ":" + 
                        minutes.getDisplayValue() + suffix;
    }
}

The TestClockDisplay class

Sebuah kelas untuk menguji perubahan pada kelas ClockDisplay.

/**
 * A class to test changes to the ClockDisplay class.
 *
 * @author Ramadhan Arif Hardijansyah
 * @version 0.1 17 October 2020
 */
public class TestClockDisplay
{
    // instance variables - replace the example below with your own
    private int x;

    /**
     * Constructor for objects of class TestClockDisplay
     */
    public TestClockDisplay()
    {
    }

    public void test()
    {
        ClockDisplay clock = new ClockDisplay();
        
        clock.setTime(22, 30);
        System.out.println(clock.getTime());
        
        clock.setTime(10, 30);
        System.out.println(clock.getTime());
        
        clock.setTime(0, 0);
        System.out.println(clock.getTime());
        
        clock.setTime(12, 0);
        System.out.println(clock.getTime());
    }
}

Berikut ini adalah hasil keluaran terminal dari Clock Display di BlueJ.

Clock Display with GUI

Berikut adalah diagram Clock Display with GUI. Terdiri dari kelas NumberDisplay, ClockDisplay, dan Clock. Untuk kelas NumberDisplay dan ClockDisplay, kode program mirip seperti Project sebelumnya sehingga akan ditampilkan untuk kode kelas Clock saja.


The Clock class

Sebuah GUI (graphical user interface) yang sangat sederhana untuk tampilan jam. Pada implementasi ini, waktu berjalan sekitar 3 menit per detik, sehingga pengujian tampilan sedikit lebih cepat.

/**
 * Sebuah GUI (graphical user interface) yang sangat sederhana untuk tampilan jam.
 * Pada implementasi ini, waktu berjalan sekitar 3 menit per detik, sehingga
 * pengujian tampilan sedikit lebih cepat.
 *
 * @author Ramadhan Arif Hardijansyah
 * @version 0.1 17 October 2020
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Clock
{
    private JFrame frame;
    private JLabel label;
    private ClockDisplay clock;
    private boolean clockRunning = false;
    private TimerThread timerThread;
    
    /**
     * Constructor for objects of class Clock
     */
    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());
    }
    
    /**
     * 'About' function: show the 'about' box.
     */
    private void showAbout()
    {
        JOptionPane.showMessageDialog (frame, 
                    "Clock Version 1.0\n" +
                    "A simple interface for the 'Objects First' clock display project",
                    "About Clock", 
                    JOptionPane.INFORMATION_MESSAGE);
    }
    
    /**
     * Quit function: keluar dari aplikasi.
     */
    private void quit()
    {
        System.exit(0);
    }

    
    /**
     * Membuat Swing frame dan kontennya.
     */
    private void makeFrame()
    {
        frame = new JFrame("Clock");
        JPanel contentPane = (JPanel)frame.getContentPane();
        contentPane.setBorder(new EmptyBorder(1, 60, 1, 60));

        makeMenuBar(frame);
        
        // Menetapkan layout manager dengan spacing yang bagus
        contentPane.setLayout(new BorderLayout(12, 12));
        
        // Membuat panel gambar di tengah
        label = new JLabel("00:00", SwingConstants.CENTER);
        Font displayFont = label.getFont().deriveFont(96.0f);
        label.setFont(displayFont);
        //imagePanel.setBorder(new EtchedBorder());
        contentPane.add(label, BorderLayout.CENTER);

        // Membuat toolbar dengan tombol-tombol
        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);

        // Menambahkan toolbar ke panel dengan flow layout untuk spacing
        JPanel flow = new JPanel();
        flow.add(toolbar);
        
        contentPane.add(flow, BorderLayout.SOUTH);
        
        // building selesai - mengatur komponen      
        frame.pack();
        
        // taruh frame di tengah layar dan perlihatkan
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);
        frame.setVisible(true);
    }
    
    /**
     * Membuat menu bar untuk main frame
     * 
     * @param frame   Sebuah frame yang mana menu bar harus ditambahkan.
     */
    private void makeMenuBar(JFrame frame)
    {
        final int SHORTCUT_MASK =
            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);
        
        JMenu menu;
        JMenuItem item;
        
        // membuat File menu
        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);   // pause 300 milliseconds
            }
            catch (InterruptedException exc) {
            }
        }
    }
}
Berikut ini adalah hasil keluaran jendela Clock Display with GUI dengan BlueJ. Terlihat ada tombol  Start, Stop, dan Step.

Sekian post tentang Java Clock Display. Semoga bermanfaat.




Comments

Popular posts from this blog

Java Exception Handling

Postingan ini membahas sebuah program tambahan tentang exception handling . Disini seolah-olah bertindak sebagai tester. Dan program yang akan dimodifikasi adalah program SimpleCalculator . Program SimpleCalculator adalah sebuah program kalkulator sederhana yang menggunakan switch..case dalam Java. Program bisa melakukan operasi pertambahan, pengurangan, perkalian, dan pembagian. Program SimpleCalculator ini dibuat menggunakan bahasa pemrograman Java dan bisa di-compile menggunakan IDE BlueJ. Dalam aplikasi ini, dicoba untuk ditambahkan catch exception untuk mengetes bagimana pembagian suatu angka dengan angka nol. Dicari modul kelas yang merupakan operasi pembagian dan dimodifikasi agar bisa mengetes operasi pembagian dengan penyebut angka nol. Exception Handling Exception Handling adalah sebuah proses menanggapi terjadinya exception, menangani runtime error seperti ClassNotFound, IO, SQL, Remote , dsb.  Exception adalah suatu kondisi tidak normal yang membutuhkan pemrosesan...

Java Classes and Objects: A Deeper Look

Pada post kali ini, kita ingin melihat lebih dalam pada pembuatan class , mengontrol akses kepada member dari sebuah class dan membuat constructors . Kita juga ingin mendiskusikan composition - sebuah kemampuan yang bisa membuat suatu kelas memiliki referensi kepada objek dari kelas-kelas lainnya sebagai member. 8.2 TIME CLASS CASE STUDY Time1 Class Declaration Contoh awal ini kita memiliki 2 kelas, Time1 dan Time1Test. Kelas Time1 merepresentasikan waktu hari ini. Kelas Time1Test adalah kelas aplikasi dimana main  membuat satu objek kelas Time1 dan memanggil method -nya. Fig. 8.1. Time1 class declaration maintains the time in a 24-hour format. /** * // Fig. 8.1: Time.java * // Time1 class declaratoin maintains the time in 24-hour format. * * @author Ramadhan Arif Hardijansyah * @version 0.1 10 October 2020 */ public class Time1 { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 /* set a new time value using univers...

Dokumentasi Proses Pembuatan Website

Postingan berikut menjelaskan dokumentasi proses pembuatan website yang berisi beberapa konten tentang curriculum vitae. Website di-hosting menggunakan salah satu web hosting provider yang menyediakan layanan hosting gratis. Link Website CV:  ramadhanarif.000webhostapp.com Prosedur Pembuatan Website Curriculum Vitae 1. Daftar Hostinger.co.id Hostinger.co.id adalah salah satu layanan hosting yang menyediakan hosting website secara gratis dengan fitur terbatas. 2. Belajar kursus HTML melalui SoloLearn Setelah melalui beberapa rangkaian latihan dan praktik, di bagian HTML Basics, terdapat Blog Project: Putting It All Together. Disini, pelajaran, latihan, dan praktik yang telah dipelajari sebelumnya digabung menjadi satu dan menghasilkan blog yang sederhana dan bagus. Contoh kode HTML juga disediakan agar dapat dipelajari dan dikembangkan lebih lanjut. 3. Pelajari contoh code HTML Blog Project: Putting It All Together...