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
.
Nguồn
2012-11-16 09:44:07
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. –
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