Tugas 4 Pemrograman Berorientasi Objek (A) 2024
Nama : Hosea Felix Sanjaya
NRP : 5025241177
Kelas : A
Program Digital Clock adalah sebuah aplikasi jam digital sederhana berbasis Java, yang ditampilkan menggunakan GUI menggunakan Swing.
Buat struktur seperti gambar tertera terlebih dahulu
Class NumberDisplay
Class NumberDisplay adalah Class yang berguna untuk mengelola nilai waktu (jam, menit, atau detik) yang memiliki batasan dan dapat melakukan rollover(kembali ke nilai nol ketika mencapai batasnya). Class ini digunakan oleh Class ClockDisplay untuk mempresentasikan jam, menit, dan detik.
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;
}
}Penjelasan
- Atribut
- limit: Batas maksimum nilai yang bisa disimpan. Misalnya, untuk detik dan menit, batasnya adalah 60, sedangkan untuk jam, batasnya adalah 24.
- value: Nilai waktu yang disimpan saat ini.
- Metode
- getValue(): Mengembalikan nilai waktu saat ini.
- getDisplayValue(): Mengembalikan nilai waktu dalam bentuk string dengan format dua digit (misalnya, "02" untuk angka 2).
- setValue(int replacementValue): Menetapkan nilai waktu dengan batasan tertentu. Jika nilainya valid (>= 0 dan < limit), nilai akan diperbarui.
- increment(): Menambah nilai waktu. Jika mencapai batas, nilai akan kembali ke 0.
Class ClockDisplay
Class ClockDisplay adalah Class yang berguna untuk mengelola seluruh waktu (jam, menit, dan detik) menggunakan tiga objek dari Class NumberDisplay. Class ini mengelola pembaruan waktu dan menyediakan interface untuk mendapatkan waktu dalam format string yang dapat ditampilkan.
public class ClockDisplay {
private NumberDisplay hours;
private NumberDisplay minutes;
private NumberDisplay seconds;
private String displayString;
public ClockDisplay(int hour, int minute, int second) {
hours = new NumberDisplay(24);
minutes = new NumberDisplay(60);
seconds = new NumberDisplay(60);
setTime(hour, minute, second);
}
public void timeTick() {
seconds.increment();
if (seconds.getValue() == 0) {
minutes.increment();
if (minutes.getValue() == 0) {
hours.increment();
}
}
updateDisplay();
}
public void setTime(int hour, int minute, int second) {
hours.setValue(hour);
minutes.setValue(minute);
seconds.setValue(second);
updateDisplay();
}
public String getTime() {
return displayString;
}
private void updateDisplay() {
displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue() + ":" + seconds.getDisplayValue();
}
}
Penjelasan
- Atribut
- hours, minutes, seconds: Masing-masing merupakan objek Class NumberDisplay yang menyimpan jam, menit, dan detik.
- displayString: Representasi waktu dalam bentuk string yang akan ditampilkan di GUI.
- Metode
- Constructor: Menginisialisasi objek NumberDisplay untuk jam, menit, dan detik. Nilai awal ditetapkan melalui parameter.
- timeTick(): Metode ini dipanggil setiap detik. Ia akan menambah nilai detik, dan jika detik kembali menjadi nol, maka menit akan ditambah. Hal yang sama juga terjadi pada jam.
- setTime(int hour, int minute, int second): Menetapkan nilai jam, menit, dan detik sesuai dengan parameter yang diberikan.
- getTime(): Mengembalikan waktu dalam format string yang digunakan untuk ditampilkan di GUI.
- updateDisplay(): Memperbarui string representasi waktu berdasarkan nilai terbaru dari jam, menit, dan detik.
Class ClockGUI
Class ClockGUI adalah Class yang berguna untuk mengelola tampilan antarmuka jam. Class ini menggunakan library Swing untuk menampilkan GUI jam digital. serta menggunakan Timer untuk mengatur interval pembaruan setiap detik.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalTime;
class ClockGUI extends JFrame {
private ClockDisplay clock;
private JLabel timeLabel;
private Timer timer;
public ClockGUI() {
LocalTime curTime = LocalTime.now();
clock = new ClockDisplay(curTime.getHour(), curTime.getMinute(), curTime.getSecond());
setTitle("This is a clock.");
setSize(300, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
timeLabel = new JLabel(clock.getTime(), SwingConstants.CENTER);
timeLabel.setFont(new Font("Serif", Font.BOLD, 40));
add(timeLabel, BorderLayout.CENTER);
startClock();
setVisible(true);
}
private void startClock() {
timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
clock.timeTick();
timeLabel.setText(clock.getTime());
}
});
timer.start();
}
}
Penjelasan
- Atribut
- clock: Objek dari Class ClockDisplay yang mengelola waktu.
- timeLabel: Label GUI yang menampilkan waktu saat ini.
- timer: Objek Timer dari Swing yang memicu pembaruan setiap detik.
- Metode
- Constructor: Inisialisasi waktu saat ini menggunakan
LocalTime, membuat objekClockDisplay, dan menampilkan GUI dengan label waktu di tengah. Metode ini juga mengatur timer untuk memperbarui waktu setiap detik. - startClock(): Memulai timer yang memanggil
timeTick()dariClockDisplaysetiap detik, lalu memperbarui label waktu.
Class Main
Class Main adalah titik eksekusi program yang akan memanggil ClockGUI untuk memulai aplikasi jam digital.
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ClockGUI();
}
});
}
}
Penjelasan
- Metode
- main(): Metode utama yang akan dipanggil ketika program dijalankan.
SwingUtilities.invokeLater()memastikan bahwa antarmuka pengguna dibuat di thread event dispatch, sesuai standar penggunaan Swing untuk aplikasi GUI.
Tidak ada komentar:
Posting Komentar