2010-01-29 4 views
8

मैं एक बहु-पंक्ति पाठ फ़ील्ड को "चोरी" टैब-कुंजी प्रेस से कैसे रोकूं?स्विट में दायर मल्टीलाइन टेक्स्ट पर टैब-कुंजी का उपयोग करें?

मेरा मतलब है: मैं खिड़की के तत्वों के बीच चक्र के लिए टैब का उपयोग करना चाहता हूं, लेकिन जब मैं मल्टीलाइन टेक्स्ट दर्ज करता हूं, तो टैब एक "सामान्य" कुंजी बन जाता है, और बस उस टेक्स्ट में टैबलेटर्स को सम्मिलित करता है जो मैं टाइप कर रहा हूं ।

मैं इसे कैसे प्रबंधित करूं? क्या मुझे कुछ कस्टम श्रोता लिखना चाहिए, या क्या मैं एक एसडब्ल्यूटी निरंतर उपयोग करके घटक के व्यवहार को बदल सकता हूं?

उत्तर

20

एसडब्ल्यूटी ट्रैवर्स लिस्टर वर्ग का उपयोग करके इस तरह के व्यवहार को लागू करने के लिए एक तंत्र को परिभाषित करता है। निम्नलिखित स्निपेट (here से लिया गया) दिखाता है कि कैसे:

Text text1 = new Text(shell, SWT.MULTI | SWT.WRAP); 
text1.setBounds(10,10,150,50); 
text1.setText("Tab will traverse out from here."); 
text1.addTraverseListener(new TraverseListener() { 
    public void keyTraversed(TraverseEvent e) { 
     if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) { 
      e.doit = true; 
     } 
    } 
}); 
2

टेक्स्टफील्ड या टेक्स्टरेरा में एक कीस्ट्रोक श्रोता जोड़ें और टैब के लिए एक विशेष हैंडलर लागू करें। मैंने स्विंग अनुप्रयोगों पर भी 'टैब पकड़' देखा है और यह आमतौर पर परेशान होता है। टैब जो फिर एक \t सम्मिलित होता है, अगर आप अभी भी पाठ फ़ील्ड में टैब अनुमति देना चाहते हैं -

आप शिफ्ट के लिए एक और हैंडलर दे सकता है।

+0

यह बहुत काम करता है। –

संबंधित मुद्दे