fork(1) download
  1. package cc.ptt;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6.  
  7. import javax.swing.BorderFactory;
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JLabel;
  11. import javax.swing.SwingUtilities;
  12.  
  13. public class CountDownDemo {
  14. public static void main(String[] args) {
  15. JFrame frm = new JFrame("Demo for Java@ptt");
  16. frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  17.  
  18. final JLabel messageBar = new JLabel("", JLabel.CENTER);
  19. messageBar.setBorder(BorderFactory.createLoweredBevelBorder());
  20. messageBar.setFont(messageBar.getFont().deriveFont(48f));
  21. frm.getContentPane().add(messageBar);
  22.  
  23. final JButton start = new JButton("開始倒數 10 秒");
  24. frm.getContentPane().add(start, BorderLayout.SOUTH);
  25. final CountDown counter = new CountDown();
  26. counter.setTickListener(new CountDown.OnTickListener() {
  27. @Override
  28. public void onTick(int seconds) {
  29. // setText method is thread-safe
  30. messageBar.setText(String.format("%d 秒", seconds));
  31. if (seconds <= 0) {
  32. SwingUtilities.invokeLater(new Runnable() {
  33. public void run() {
  34. start.setEnabled(true);
  35. }
  36. });
  37. }
  38. }
  39. });
  40. start.addActionListener(new ActionListener() {
  41. @Override
  42. public void actionPerformed(ActionEvent e) {
  43. start.setEnabled(false);
  44. counter.asyncStart(10);
  45. // counter.syncStart(10);
  46. }
  47. });
  48.  
  49. frm.setSize(400, 400);
  50. frm.setLocationRelativeTo(null);
  51. frm.setVisible(true);
  52. }
  53. }
  54.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty