2009-05-26 41 views

Trả lời

0

Bạn cần phải thực hiện các mẫu Observer vào hỗn hợp của bạn, và kích hoạt một mọi thông báo mới:

  • trọng tâm bị mất trên một hộp văn bản cụ thể VÀ
  • tiêu điểm không chuyển giao cho bất kỳ các hộp văn bản khác.
+1

rằng sẽ không làm việc vì không có bảo đảm về trình tự các sự kiện mất tập trung và tập trung vào các hộp khác nhau. – retrobrain

+0

Sử dụng DeferredCommand có thể thực hiện thủ thuật: http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/DeferredCommand.html – ivo

+0

Làm rõ: 1. Bắt sự kiện tiêu điểm bị mất từ ​​một trong các hộp văn bản; 2. Sử dụng DefferredCommand để kiểm tra xem trọng tâm không đạt được trên các hộp văn bản khác; 3. Nếu các hộp văn bản khác không lấy được tiêu điểm, thì tổng hợp của bạn sẽ phát ra thông báo "mất tiêu điểm" (hoặc bất kỳ thông báo nào) – ivo

1

Nếu bạn muốn chỉ sự kiện khi toàn bộ tiện ích của bạn mất tiêu điểm (không phải hộp văn bản), thì hãy đặt cấp cao nhất của tiện ích là FocusPanel và hiển thị các sự kiện mà nó mang lại cho bạn.

+1

Đó là điều đầu tiên tôi đã thử nhưng vì lý do nào đó không có sự kiện nào bị sa thải. FocusPanel giữ một HorizontalPanel có ba hộp văn bản. – retrobrain

0

Bạn không thể sử dụng bộ hẹn giờ? Trên tiêu điểm bị mất từ ​​một hộp văn bản, bắt đầu một bộ đếm thời gian 5ms (hoặc một cái gì đó nhỏ) mà khi nó chạm, sẽ kiểm tra tiêu điểm trên tất cả 3 trường hợp TextBox. Nếu không có tập trung, sau đó bạn tự thông báo cho người quan sát của mình. Nếu người ta tập trung, không làm gì cả.

Đặt này trong lớp composite của bạn:

private Map<Widget, Boolean> m_hasFocus = new HashMap<Widget, Boolean>(); 

Và sau đó thêm video này vào mỗi một trong số các trường hợp TextBox của bạn:

new FocusListener() { 
    public void onFocus(Widget sender) { 
    m_hasFocus.put(sender, Boolean.TRUE); 
    } 

    public void onLostFocus(Widget sender) { 
    m_hasFocus.put(sender, Boolean.FALSE); 
    new Timer() { 
     public void run() { 
     for (Boolean bool : m_hasFocus.values()) { 
      if (bool) { return; } 
     } 
     notifyObservers(); 
     } 
    }; 
    } 
}; 
Các vấn đề liên quan