تبحث عن مجموعة من التحرير والسرد في SWT/Jface والتي تدعم الإكمال التلقائي
-
21-08-2019 - |
سؤال
أنا أبحث عن مجموعة من التحرير والسرد (عارض) في SWT / JFACE الذي يدعم الإكمال التلقائي / الكتابة ، أي يمكن للمستخدم إدخال اثنين من الحروف ويجب أن تعرض القائمة المنسدلة جميع عناصر المطابقة.
المحلول
يمكنك أيضًا التحقق من org.eclipse.jface.fieldassist.AutoCompleteField
صف دراسي. إنه ليس كومبو ، بل مجرد حقل نص ، لكنه يضيف وظائف تلقائية كاملة كما لو كان التحرير والسرد بسهولة بالغة. يمكنك أن تفعل شيئًا بسيطًا مثل هذا:
Text textField = new Text(parentComposite, SWT.BORDER);
new AutoCompleteField(textField, new TextContentAdapter(), new String[]
{"autocomplete option 1", "autocomplete option 2"});
نصائح أخرى
لا أعتقد أن هناك أي شيء مثل هذا المدمج في التحرير والسرد أو comboviewer.
كما يقترح Thehiatus org.eclipse.jface.fieldassist.AutoCompleteField
ربما يكون أفضل مكان للبحث عن هذا ، ومع ذلك ، هناك دعم للمجموعات:
new AutoCompleteField(combo, new ComboContentAdapter(), new String[]
{"item0", "item1"});
قد تكون مهتمًا بـ Eclipse's "مساعدة المحتوى" خاصية. يمكنك رؤيته في العمل عند استخدام محرر Java's Eclipse IDE. أثناء تحرير التعليمات البرمجية المصدر ، سترى أحيانًا قائمة منسدلة مع عبارات تكمل ما كنت تكتبه. (لاحظ أنه يمكنك الضغط Ctrl+الفضاء لإجبار القائمة المنسدلة على عرضها.)
يمكنك تنفيذ هذا في تطبيق SWT/Jface الخاص بك أيضًا. ال "دليل مطور Java إلى Eclipse"لديه عينة تطبيق ينفذ مساعدة المحتوى. تطبيق العينة هو محرر SQL ، ويتم وصفه في الفصل 26 ، بناء محرر نص مخصص مع نص Jface." هناك في الواقع نظرة عامة عبر الإنترنت على الفصل هنا. مشروع محرر SQL ، com.ibm.jdg2e.editor.jfacetext.sql
, ، يمكن ايجاده هنا.
من ناحية أخرى ، إذا كنت ترغب في إنشاء عنصر واجهة مستخدم التحرير والسرد الخاص بك والكذب التلقائي بناءً على الإدخال الذي يتم إدخاله ، فقد لا يكون هذا قابلاً للتطبيق للغاية. أنا أفكر في org.eclipse.jface.viewers.ComboViewer
قد يكون مفيدًا (على الرغم من أنني لست إيجابيًا).
الدفع: http://sourceforge.net/projects/swtaddons/
أستخدمه في مشروعي (مع القليل من القرص).
من السهل حقًا إعداد هذا.
بفضل تعليق PAZ117 ، اعتقدت أنني سأشارك الرمز لجعل هذا العمل:
String[] proposals = new String[controller.model().size()];
for (int i = 0; i < controller.model().size(); i++)
proposals[i] = controller.model().get(i).getAppropriateName();
comboViewer = new ComboViewer(parent, SWT.NONE);
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setLabelProvider(new AppropriateLabelProvider());
comboViewer.setInput(_controller.model());
// additionally, configure the comboViewer arbitrary
new AutoCompleteField(comboViewer.getCombo(), new ComboContentAdapter(), proposals);
الإزعاج الثانوي الوحيد هو أنه يتعين عليك ملء نموذج ComboViewer و Completefield بشكل منفصل بشكل منفصل ، ولكن يمكن أن يكون على الأقل تلقائيًا عبر طريقة فائدة ثابتة أو شيء مشابه.
كمرجع للزائرين في المستقبل ، Autocompetecomboinput (الوظيفة الإضافية SWT) ، يمكن أن تكون أيضًا وسيلة لتحقيق ذلك.
قصاصة الرمز لقطات الشاشة (راجع رابط الوثائق أعلاه لقالب الرمز):
import net.sf.swtaddons.autocomplete.combo.AutocompleteComboInput;
...
subjectCodeCombo = new Combo(tab3Composite, SWT.DROP_DOWN);
// other code modifying Combo appearance here...
// returns a String[] of items retrieved from database
String[] subjectCodeArray = dbQuery.subjectsToArray();
subjectCodeCombo.setItems(subjectCodeArray);
subjectCodeCombo.setText("- SELECT -");
new AutocompleteComboInput(subjectCodeCombo);
تتطلب الوظيفة الإضافية إضافة جميع الجرار أدناه إلى المكتبة: (مزيد من المعلومات)
- Eclipse-equinox-common-3.5.0.jar
- net.sf.swtaddons_0.1.1.bin_src.jar (المصدر)
- org.eclipse.core.commands.jar
- org.eclipse.jface-3.6.0.jar
انقر هنا لحزمة جرة.