2012-11-15 6 views
5

Tôi cần biết khi người dùng chuyển sang trình bao khác bằng cách nhấp vào đó.SWT - sự kiện để biết chắc chắn, nếu người dùng vỏ đã chuyển sang một trình bao khác

Tôi đã thử shellListener.shellDeactivated() nhưng sự kiện này được kích hoạt, khi trình bao này mất tập trung vào các điều khiển riêng của nó, có nghĩa là khi một Điều khiển trong Shell đang hoạt động được nhấp.

Đây không phải là hành vi dự định, vì tôi cần biết khi một Shell khác được kích hoạt thay vì của tôi.

Bất kỳ ý tưởng nào?

+1

Không thể sử dụng [ShellListener.shellActivated()] (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi % 2Forg% 2Feclipse% 2Fswt% 2Fevents% 2FShellListener.html) trong trình bao khác ?. Sự kiện này được kích hoạt khi vỏ trở thành cửa sổ hoạt động. –

+0

có, nhưng đây là giải pháp mà tôi đang sử dụng ngay bây giờ. Tôi đang tìm một giải pháp sạch. – Skip

Trả lời

4

Giả sử bạn có ba vỏ. Một vỏ chính và hai vỏ có thể được mở từ vỏ chính.

Vì vậy, trình bao chính cần được thông báo khi một trình bao khác được kích hoạt. Bạn có thể thêm một người biết lắng nghe mà chờ đợi cho một loại sự kiện cụ thể (trong vỏ chính):

shell.addListener(SWT.Show, new Listener() { 

     @Override 
     public void handleEvent(Event e) { 
      System.out.println("activated: " + e.text); 
     } 
    }); 

Các vỏ khác nên sa thải (notify) sự kiện này khi họ bị kích hoạt. Để bạn thêm trình nghe shell vào hai shell khác và fire sự kiện trong phương thức shellActivated() với o.notifyListeners();.

shell.addShellListener(new ShellAdapter() { 
     @Override 
     public void shellActivated(ShellEvent e) { 
      Shell shellSrc = (Shell) e.getSource(); 
      Display display = shellSrc.getDisplay(); 

      Event event = new Event(); 
      event.type = SWT.Show; 
      event.text = "other shell 1"; 

      Shell[] shells = display.getShells(); 
      for(Shell o : shells) { 
       o.notifyListeners(SWT.Show, event); 
      } 
     } 
    }); 

Khi bạn kích hoạt một trong hai vỏ khác, vỏ chính sẽ được thông báo với loại sự kiện SWT.Show.