2012-11-15 11 views
5

पर स्विच किया है, तो मुझे यह जानने की जरूरत है कि जब कोई उपयोगकर्ता दूसरे शेल पर स्विच करता है, उसमें क्लिक करके।एसडब्ल्यूटी - घटना को भरोसेमंद ढंग से पता है, यदि शैल उपयोगकर्ता ने दूसरे शेल

मैंने shellListener.shellDeactivated() की कोशिश की लेकिन यह घटना ट्रिगर हो गई, जब खोल अपने नियंत्रण पर ध्यान केंद्रित करता है, इसका मतलब है कि जब सक्रिय शैल में नियंत्रण क्लिक किया गया था।

यह इरादा व्यवहार नहीं है, क्योंकि मुझे पता होना चाहिए कि जब एक और शैल सक्रिय हो गया था, तो मेरे बजाय।

कोई विचार?

+1

[ShellListener.shellActivated()] का उपयोग करना संभव नहीं है (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi % 2Forg% 2 फिक्स्प्से% 2Fswt% 2Fevents% 2FShellListener.html) दूसरे खोल में? जब यह विंडो सक्रिय विंडो बन जाती है तो यह ईवेंट ट्रिगर होता है। –

+0

हां, लेकिन यह एक कामकाज है जिसका मैं अब उपयोग कर रहा हूं। मैं एक साफ समाधान की तलाश में हूं। – Skip

उत्तर

4

मान लीजिए कि आपके पास तीन गोले हैं। एक मुख्य खोल और दो गोले जिन्हें मुख्य खोल से खोला जा सकता है।

तो जब कोई दूसरा खोल सक्रिय हो जाता है तो मुख्य खोल अधिसूचित किया जाना चाहिए। आप एक श्रोता जो (मुख्य खोल में) एक विशिष्ट घटना प्रकार के लिए इंतजार कर रहा है जोड़ सकते हैं:

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

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

अन्य गोले सक्रिय किया जाना चाहिए (notify) इस घटना जब वे सक्रिय हो गया। इसके लिए आप अन्य दो गोले में एक शेल श्रोता जोड़ें, और fireshellActivated()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); 
      } 
     } 
    }); 

जब आप अन्य दो गोले मुख्य खोल घटना प्रकार SWT.Show सूचित कर दिया जाएगा में से एक को सक्रिय करें।