Tik Tok?! Bukan aplikasi yang lagi naik daun, tapi program Java?
Pada kelas minggu ini, saya belajar cara untuk membuat sebuah jam digital dengan bantuan BlueJ! Tampilan jam digital ini sangat sederhana, mengingat saya baru mempelajarinya.
Tampilan
Source Code
NumberDisplay
/*
* @author Indira Nursyamsina Hazimi
*/
public class NumberDisplay
{
private int limit;
private int sum;//nilai jam atau menit
//mengatur limit jam dan menit
public NumberDisplay(int max)
{
limit=max;
sum=0;
}
//method untuk return nilai sekarang
public int getValue()
{
return sum;
}
//increment nilai jam atau menit
//menghindari angka lebih dari limitnya
public void increment()
{
sum=(sum+1)%limit;
}
//mengembalikan nilai yang di tampilkan (jika angka kurang dari 10 maka akan ditambahkan 0 di depannya).
//(ex. 7 -> 07)
public String getDisplayValue()
{
if(sum<10)
{
return "0" + sum;
}
else
{
return "" + sum;
}
}
//mengatur nilai yang akan ditampilkan.
//Jika kurang dari 0 atau melebihi batas (>59) maka akan diabaikan.
public void setValue(int replacementValue)
{
if((replacementValue >= 0) && (replacementValue < limit))
{
sum=replacementValue;
}
}
}
ClockDisplay
/*
* @author Indira Nursyamsina Hazimi
*/
public class ClockDisplay
{
private NumberDisplay jam;
private NumberDisplay menit;
private String displayString; //mensimulasikan layar sebenarnya.
//membuat objek ClockDisplay.
//membuat clock baru dengan nilai awal 00:00 dengan limit 24 jam dan 60 menit
public ClockDisplay()
{
jam=new NumberDisplay(24);
menit=new NumberDisplay(60);
updateDisplay();
}
//method yang dipanggil setiap menit untuk memperbaharui tampilan
public void timeTick()
{
menit.increment();
if(menit.getValue()==0)
{
jam.increment();
}
updateDisplay();
}
//mengatur tampilan clock dengan spesifik pada jam dan menitnya
public void setTime(int hour, int minute)
{
jam.setValue(hour);
menit.setValue(minute);
updateDisplay();
}
//mengambil nilai yang sekarang ditampilkan dengan format HH:MM
public String getTime()
{
return displayString;
}
//memperbaharui string yang merepresentasikan tampilan.
private void updateDisplay()
{
displayString=jam.getDisplayValue() + ":" + menit.getDisplayValue();
}
}
TestClockDisplay
/*
* @author Indira Nursyamsina Hazimi
*/
public class TestClockDisplay
{
public void test()
{
ClockDisplay clock=new ClockDisplay();
clock.setTime(7,11);
System.out.println(clock.getTime());
clock.setTime(21,16);
System.out.println(clock.getTime());
clock.setTime(4,29);
System.out.println(clock.getTime());
clock.setTime(12,1);
System.out.println(clock.getTime());
clock.setTime(17,39);
System.out.println(clock.getTime());
}
}
ClockGUI
/*
* @author Indira Nursyamsina Hazimi
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class ClockGUI
{
private JFrame frame;
private JLabel label;
private ClockDisplay clock;
private boolean clockOn = false;
private TimerThread timerThread;
//membuat frame dan clock baru
public void Clock()
{
makeFrame();
clock = new ClockDisplay();
}
//memulai jam.
private void start()
{
clockOn = true;
timerThread = new TimerThread();
timerThread.start();
}
//memberhentikan jam.
private void stop()
{
clockOn = false;
}
//menjalankan jam secara manual (naik per menit)
private void step()
{
clock.timeTick();
label.setText(clock.getTime());
}
//menampilkan dialog About dari program ini
private void showAbout()
{
JOptionPane.showMessageDialog (frame, "Clock Version 0.1\n" +
"Membuat jam digital simpel dengan Java.",
"About Clock",
JOptionPane.INFORMATION_MESSAGE);
}
//keluar dari program.
private void quit()
{
System.exit(0);
}
//membuat frame dan content di dalamnya
private void makeFrame()
{
frame = new JFrame("Clock");
JPanel contentPane = (JPanel)frame.getContentPane();
contentPane.setBorder(new EmptyBorder(1,60,1,60));
makeMenuBar(frame);
//mengatur tampilan dengan jarak
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);
//membuat toolbar dengan tombol
JPanel toolbar = new JPanel();
toolbar.setLayout(new GridLayout(1,0));
//membuat tombol Start untuk memulai clock
JButton startButton = new JButton("Start");
startButton.addActionListener(e->start());
toolbar.add(startButton);
//membuat tombol Stop untuk menghentikan clock
JButton stopButton = new JButton("Stop");
stopButton.addActionListener(e->stop());
toolbar.add(stopButton);
//membuat tombol Step untuk menambah 1 menit pada clock
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();
//memposisikan frame di tengah layar serta menampilkannya
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 di frame
private void makeMenuBar(JFrame frame)
{
final int SHORTCUT_MASK =
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
//membuat dropdown menu
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()
{
//selama jam jalan, maka akan dilakukan Step (menambah nilai setiap menitnya)
//pause agar dapat melihat jam nya
while(clockOn)
{
step();
pause();
}
}
private void pause()
{
try
{
Thread.sleep(900);
}
catch(InterruptedException exc)
{
}
}
}
}
Komentar
Posting Komentar