2012-06-15 55 views
5

Tôi là người mới bắt đầu sử dụng Java và tôi đang cố gắng xây dựng một chương trình đồng hồ bấm giờ đơn giản hiển thị thời gian trên giao diện đồ họa swing. Làm cho đồng hồ bấm giờ trở nên dễ dàng, tuy nhiên tôi không thể tìm cách để cập nhật GUI mỗi giây và hiển thị thời gian hiện tại trên đồng hồ bấm giờ. Tôi có thể làm cái này như thế nào?Đồng hồ bấm giờ Java cập nhật GUI mỗi giây?

+10

Sử dụng lớp 'Hẹn giờ' của Swing'. Thông tin thêm về cách sử dụng 'Timer' có sẵn, ví dụ, [trong câu hỏi và đặc biệt là câu trả lời cho nó.] (Http://stackoverflow.com/q/11053097/613495) – Boro

+3

Xem thêm [answer] này (http://stackoverflow.com/a/5529043/230513). – trashgod

+0

Yea Tôi biết tôi đã có nó ở đâu đó [một trong những câu trả lời của tôi liên quan đến việc sử dụng 'Timer'] (http://stackoverflow.com/a/5911514/613495). @trashgod rất tốt đẹp câu trả lời/mẫu +1 ở đây và +1 có ... và tôi ra khỏi phiếu ... cho ngày hôm nay :) – Boro

Trả lời

6

cái gì đó dọc những dòng này nên làm điều đó:

import java.awt.EventQueue; 
import java.util.Timer; 
import java.util.TimerTask; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

/** @see https://stackoverflow.com/a/11058263/230513 */ 
public class Clock { 

    private Timer timer = new Timer(); 
    private JLabel timeLabel = new JLabel(" ", JLabel.CENTER); 

    public Clock() { 
     JFrame f = new JFrame("Seconds"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(timeLabel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     timer.schedule(new UpdateUITask(), 0, 1000); 
    } 

    private class UpdateUITask extends TimerTask { 

     int nSeconds = 0; 

     @Override 
     public void run() { 
      EventQueue.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        timeLabel.setText(String.valueOf(nSeconds++)); 
       } 
      }); 
     } 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       final Clock clock = new Clock(); 
      } 
     }); 
    } 
} 

Các timeLabel sẽ luôn hiển thị số giây hẹn giờ đã được chạy.

  1. Bạn sẽ cần định dạng chính xác để hiển thị "hh: mm: ss"; một cách tiếp cận được hiển thị here.

  2. Tạo vùng chứa và thêm nhãn vào nó để bạn có thể hiển thị nó như là một phần của GUI.

  3. So sánh kết quả với điều này alternate sử dụng javax.swing.Timer.

+0

Tôi đã tạo GUI bằng cách sử dụng trình soạn thảo trực quan từ netbeans, làm thế nào tôi có thể tham chiếu một nhãn bên trong GUI? – Dangerosking

+0

@trashgod phần nào cần invokeLater? – GETah

+0

@GETah Phương thức 'run()' của 'UpdateUITask', vì một java.util.Timer sẽ chạy nó khỏi EDT. – millimoose

Các vấn đề liên quan