لقد أنتج المشروع بشكل أساسي نسخة الآن، على الرغم من أنه عمل هامشي، إلا أنني ما زلت أرغب في فرز الأشياء المستخدمة. الأول هو استخدام TableView. RWT هي مجموعة فرعية من SWT لذلك، قد لا تقوم RWT بتنفيذ جميع واجهات SWT بشكل كامل، كما أنها ليست كاملة مثل SWT. تختلف بنية الاثنين، وتنعكس في شكل العرض والواجهة، لكن عناصر التحكم الأساسية لا تزال كما هي. نتعلم هنا أولاً استخدام بعض عناصر التحكم الشائعة من خلال SWT.
أولاً، دعونا نتحدث عن ملفات المكتبة التي يتطلبها SWT. يتضمن: org.Eclipse.swt_3.xxjar org.Eclipse.jface_3.xxjar
org.Eclipse.core.runtime_3.xxjar org.Eclipse.ui.workbench_3.xxjar (org.Eclipse.equinox.common_3.xxjar) بالإضافة إلى ذلك، تحتوي هذه الحزمة أيضًا على org.Eclipse.core.runtime مربكة بعض الشيء. يتم استيراد هذه الحزمة أيضًا. بالإضافة إلى ذلك، قد تحدث أخطاء في استيراد الحزمة اعتمادًا على الإصدار.
التعليمة البرمجية التالية هي إنشاء Tableview، المقتبس من "Eclipse Getting Started to Mastery"
+ توسيع نسخة عادية من المصدر إلى الحافظة؟
import org.Eclipse.jface.viewers.ColumnWeightData;
import org.Eclipse.jface.viewers.TableLayout;
import org.Eclipse.jface.viewers.TableViewer;
import org.Eclipse.swt.SWT;
import org.Eclipse.swt.layout.FillLayout;
import org.Eclipse.swt.widgets.Display;
import org.Eclipse.swt.widgets.Shell;
import org.Eclipse.swt.widgets.Table;
import org.Eclipse.swt.widgets.TableColumn;
الطبقة العامة TableViewer1 {
public static void main(String[] args) {
جديد TableViewer1().open();
}
الفراغ العام مفتوح () {
عرض العرض النهائي = عرض جديد ()؛
شل النهائي شل = شل جديد ()؛
shell.setSize(500, 150);
//--------------------------------------------
shell.setLayout(new fillLayout());
// الخطوة الأولى: إنشاء كائن TableViewer. النمط: MULTI يسمح بتحديدات متعددة، وH_SCROLL له أشرطة تمرير أفقية، وV_SCROLL له أشرطة تمرير رأسية، وBORDER له حدود، وFULL_SELECTION يحدد الصف بأكمله.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// الخطوة 2: قم بتعيين طريقة التخطيط من خلال كائن الجدول الموجود في الجدول
جدول الجدول = tv.getTable();
table.setHeaderVisible(true);// عرض رأس الجدول
table.setLinesVisible(true);// عرض خطوط الجدول
تخطيط TableLayout = جديد TableLayout(); // تخطيط مخصص للجداول
table.setLayout(layout);
// الخطوة 3: إنشاء أعمدة الجدول باستخدام فئة TableColumn
Layout.addColumnData(new ColumnWeightData(13));//عرض عمود المعرف 13 بكسل
new TableColumn(table, SWT.NONE).setText("رقم الهوية");
Layout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("Name");
Layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Gender");
Layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Age");
Layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("وقت إنشاء السجل");
// الخطوة 4: إعداد الحاوية الداخلية وعلامة التمييز
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// الخطوة 5: استخدم طريقة setInput الخاصة بـ TableViewer لإدخال البيانات في الجدول
بيانات الكائن = PeopleFactory.getPeoples();
tv.setInput(data);
//--------------------------------------------
shell.open();
بينما (!shell.isDispose()) {
إذا (!display.readAndDispatch())
Display.sleep();
}
dispose();
}
}
import org.Eclipse.jface.viewers.ColumnWeightData;
import org.Eclipse.jface.viewers.TableLayout;
import org.Eclipse.jface.viewers.TableViewer;
import org.Eclipse.swt.SWT;
import org.Eclipse.swt.layout.FillLayout;
import org.Eclipse.swt.widgets.Display;
import org.Eclipse.swt.widgets.Shell;
import org.Eclipse.swt.widgets.Table;
import org.Eclipse.swt.widgets.TableColumn;
الطبقة العامة TableViewer1 {
public static void main(String[] args) {
جديد TableViewer1().open();
}
الفراغ العام مفتوح () {
عرض العرض النهائي = عرض جديد ()؛
شل النهائي شل = شل جديد ()؛
shell.setSize(500, 150);
//--------------------------------------------
shell.setLayout(new fillLayout());
// الخطوة الأولى: إنشاء كائن TableViewer. النمط: MULTI يسمح بتحديدات متعددة، وH_SCROLL له أشرطة تمرير أفقية، وV_SCROLL له أشرطة تمرير رأسية، وBORDER له حدود، وFULL_SELECTION يحدد الصف بأكمله.
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// الخطوة 2: قم بتعيين طريقة التخطيط من خلال كائن الجدول الموجود في الجدول
جدول الجدول = tv.getTable();
table.setHeaderVisible(true);// عرض رأس الجدول
table.setLinesVisible(true);// عرض خطوط الجدول
تخطيط TableLayout = جديد TableLayout(); // تخطيط مخصص للجداول
table.setLayout(layout);
// الخطوة 3: إنشاء أعمدة الجدول باستخدام فئة TableColumn
Layout.addColumnData(new ColumnWeightData(13));//عرض عمود المعرف 13 بكسل
new TableColumn(table, SWT.NONE).setText("رقم الهوية");
Layout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("Name");
Layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Gender");
Layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("Age");
Layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("وقت إنشاء السجل");
// الخطوة 4: إعداد الحاوية الداخلية وعلامة التمييز
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// الخطوة 5: استخدم طريقة setInput الخاصة بـ TableViewer لإدخال البيانات في الجدول
بيانات الكائن = PeopleFactory.getPeoples();
tv.setInput(data);
//--------------------------------------------
shell.open();
بينما (!shell.isDispose()) {
إذا (!display.readAndDispatch())
Display.sleep();
}
dispose();
}
}
فيما يلي الفئتين المقدمتين، إذا كان رمز هاتين الفئتين صغيرًا وكانت الخدمة عبارة عن جدول واحد، فيمكن كتابتهما كفئات داخلية:
عرض نسخة عادية إلى الحافظة؟
import java.util.List;
import org.Eclipse.jface.viewers.IStructuredContentProvider;
import org.Eclipse.jface.viewers.Viewer;
// الحاوية الداخلية. تقوم هذه الفئة بتصفية البيانات المدخلة في النموذج وتحويلها.
// تحتوي هذه الفئة على ثلاث طرق لتنفيذ الواجهة، من بينها getElements هي الطريقة الرئيسية، ونادرا ما يتم استخدام الطريقتين الأخريين، ويكفي التنفيذ الفارغ فقط
الطبقة العامة TableViewerContentProvider تنفذ IStructuredContentProvider {
// تصفية وتحويل مدخلات مجموعة البيانات إلى الجدول.
// يجب تحويل جميع مجموعات البيانات المدخلة إلى صفائف. كل عنصر في المصفوفة هو كائن كيان، وهو سجل في الجدول.
كائن عام[] getElements(عنصر الكائن) {
// عنصر المعلمة هو إدخال كائن من خلال setInput(Object input). في هذا المثال، الإدخال إلى setInput عبارة عن مجموعة قائمة.
إذا (عنصر مثيل القائمة)// أضف حكمًا على نوع القائمة
return ((List) element).toArray(); // تحويل قائمة مجموعة البيانات إلى مصفوفة
آخر
return new Object[0]; // إذا لم يكن من نوع القائمة، فارجع مصفوفة فارغة
}
// يتم تشغيل هذه الطريقة عند إغلاق كائن TableViewer
التخلص من الفراغ العام () {
}
// يتم تشغيل هذه الطريقة عندما يستدعي TableViewer setInput() مرة أخرى
إدخال الفراغ العام (Viewer v، Object oldInput، Object newInput) {
}
}
import java.util.List;
import org.Eclipse.jface.viewers.IStructuredContentProvider;
import org.Eclipse.jface.viewers.Viewer;
// الحاوية الداخلية. تقوم هذه الفئة بتصفية البيانات المدخلة في النموذج وتحويلها.
// تحتوي هذه الفئة على ثلاث طرق لتنفيذ الواجهة، من بينها getElements هي الطريقة الرئيسية، ونادرا ما يتم استخدام الطريقتين الأخريين، ويكفي التنفيذ الفارغ فقط
الطبقة العامة TableViewerContentProvider تنفذ IStructuredContentProvider {
// تصفية وتحويل مدخلات مجموعة البيانات إلى الجدول.
// يجب تحويل جميع مجموعات البيانات المدخلة إلى صفائف. كل عنصر من عناصر المصفوفة هو كائن كيان، وهو سجل في الجدول.
كائن عام[] getElements(عنصر الكائن) {
// عنصر المعلمة هو إدخال كائن من خلال setInput(Object input). في هذا المثال، الإدخال إلى setInput عبارة عن مجموعة قائمة.
إذا (عنصر مثيل القائمة)// أضف حكمًا على نوع القائمة
return ((List) element).toArray(); // تحويل قائمة مجموعة البيانات إلى مصفوفة
آخر
return new Object[0]; // إذا لم يكن من نوع القائمة، فارجع مصفوفة فارغة
}
// يتم تشغيل هذه الطريقة عند إغلاق كائن TableViewer
التخلص من الفراغ العام () {
}
// يتم تشغيل هذه الطريقة عندما يستدعي TableViewer setInput() مرة أخرى
إدخال الفراغ العام (Viewer v، Object oldInput، Object newInput) {
}
}
عرض نسخة عادية إلى الحافظة؟
import org.Eclipse.jface.viewers.ILabelProviderListener;
import org.Eclipse.jface.viewers.ITableLabelProvider;
import org.Eclipse.swt.graphics.Image;
//تاجر. إذا كانت الحاوية الداخلية تعالج إدخال مجموعة البيانات في النموذج،
// ثم يقوم مُلصق العلامات بمعالجة وتحويل كائن كيان واحد في مجموعة البيانات، ويحدد مُلصق العلامات أي عمود من الجدول يتم عرض الحقول الموجودة في كائن الكيان فيه.
فئة عامة TableViewerLabelProvider تنفذ ITableLabelProvider {
// إنشاء عدة صور
صورة خاصة[] الصور = صورة جديدة[] {
صورة جديدة (خالية، "icons/refresh.gif")،
صورة جديدة (خالية، "icons/star.jpg")،
صورة جديدة(null, "icons/moon.jpg") };
// تحدد هذه الطريقة النص الذي سيتم عرضه في كل عمود من الجدول لسجلات البيانات.
// معلمة العنصر هي كائن فئة الكيان. col هو رقم العمود الذي سيتم تعيينه حاليًا، و0 هو العمود الأول.
سلسلة عامة getColumnText(عنصر الكائن، int col) {
PeopleEntity o = (PeopleEntity) عنصر // نوع التحويل
if (col == 0)// ما هي البيانات التي يجب عرضها في العمود الأول؟
إرجاع o.getId().toString();
إذا (العمود == 1)
إرجاع o.getName();
إذا (العمود == 2)
إرجاع o.isSex() ? "ذكر" : "أنثى";
إذا (العمود == 3)
return String.valueOf(o.getAge()); // تحويل نوع int إلى نوع سلسلة
إذا (العمود == 4)
return o.getCreateDate().toString();
return null; // يمكن للطريقة إرجاع قيمة فارغة
}
// تُستخدم طريقة getColumnText لعرض النص، وتُستخدم هذه الطريقة لعرض الصور.
الصورة العامة getColumnImage(Object element, int col) {
PeopleEntity o = عنصر (PeopleEntity)؛
// اسمح فقط لسجل "Chen Gang" بعرض الصور
if (o.getName().equals("عصابة تشين") || o.getName().equals("تشو يو")) {
if (col == 0)// الصورة التي سيتم عرضها في العمود الأول
إرجاع الصور[0]؛
if (col == 2)//عرض أيقونات مختلفة حسب الجنس
إرجاع o.isSex() ؟ الصور[1] : الصور[2];
}
return null; // يمكن للطريقة إرجاع قيمة فارغة
}
التخلص من الفراغ العام () {
// لا تنس مبدأ مكونات SWT: قم بإنشائه بنفسك ثم أطلقه بنفسك
لـ (صورة الصورة: الصور) {
image.dispose();
}
}
//------------- نادرًا ما يتم استخدام الطرق التالية، لذا لا تقلق بشأنها حاليًا ودعها يتم تنفيذها فارغة -------------- ----
منطقية عامة isLabelProperty (عنصر الكائن، خاصية السلسلة) {
عودة كاذبة.
}
public void addListener(ILabelProviderListenerwriter) {
}
إزالة الفراغ العام (ILabelProviderListener المستمع) {
}
}
import org.Eclipse.jface.viewers.ILabelProviderListener;
import org.Eclipse.jface.viewers.ITableLabelProvider;
import org.Eclipse.swt.graphics.Image;
//تاغر. إذا كانت الحاوية الداخلية تعالج إدخال مجموعة البيانات في النموذج،
// ثم يقوم مُلصق العلامات بمعالجة وتحويل كائن كيان واحد في مجموعة البيانات، ويحدد مُلصق العلامات أي عمود من الجدول يتم عرض الحقول الموجودة في كائن الكيان فيه.
الطبقة العامة TableViewerLabelProvider تنفذ ITableLabelProvider {
// إنشاء عدة صور
صورة خاصة[] الصور = صورة جديدة[] {
صورة جديدة (خالية، "icons/refresh.gif")،
صورة جديدة (خالية، "icons/star.jpg")،
صورة جديدة(null, "icons/moon.jpg") };
// تحدد هذه الطريقة النص الذي سيتم عرضه في كل عمود من الجدول لسجلات البيانات.
// معلمة العنصر هي كائن فئة الكيان. col هو رقم العمود الذي سيتم تعيينه حاليًا، و0 هو العمود الأول.
سلسلة عامة getColumnText(عنصر الكائن، int col) {
PeopleEntity o = (PeopleEntity) عنصر // نوع التحويل
if (col == 0)// ما هي البيانات التي يجب عرضها في العمود الأول؟
إرجاع o.getId().toString();
إذا (العمود == 1)
إرجاع o.getName();
إذا (العمود == 2)
إرجاع o.isSex() ? "ذكر" : "أنثى";
إذا (العمود == 3)
return String.valueOf(o.getAge()); // تحويل نوع int إلى نوع سلسلة
إذا (العمود == 4)
return o.getCreateDate().toString();
return null; // يمكن للطريقة إرجاع قيمة فارغة
}
// تُستخدم طريقة getColumnText لعرض النص، وتُستخدم هذه الطريقة لعرض الصور.
الصورة العامة getColumnImage(Object element, int col) {
PeopleEntity o = عنصر (PeopleEntity)؛
// اسمح فقط لسجل "Chen Gang" بعرض الصور
if (o.getName().equals("عصابة تشين") || o.getName().equals("تشو يو")) {
if (col == 0)// الصورة التي سيتم عرضها في العمود الأول
إرجاع الصور[0]؛
if (col == 2)//عرض أيقونات مختلفة حسب الجنس
إرجاع o.isSex() ؟ الصور[1] : الصور[2];
}
return null; // يمكن للطريقة إرجاع قيمة فارغة
}
التخلص من الفراغ العام () {
// لا تنس مبدأ مكونات SWT: قم بإنشائه بنفسك ثم أطلقه بنفسك
لـ (صورة الصورة: الصور) {
image.dispose();
}
}
//------------- نادرًا ما يتم استخدام الطرق التالية، لذا لا تقلق بشأنها حاليًا ودعها يتم تنفيذها فارغة -------------- ----
منطقية عامة isLabelProperty (عنصر الكائن، خاصية السلسلة) {
عودة كاذبة.
}
public void addListener(ILabelProviderListenerwriter) {
}
إزالة الفراغ العام (ILabelProviderListener المستمع) {
}
}
والآخر هو فئة الكيان. هنا نكتب ببساطة كيانًا. يمكن قراءة البيانات هنا من قاعدة البيانات، ولكن بعد ذلك انتبه إلى نوع الحاوية المستخدمة لتخزين البيانات.
وانتبه إلى نوع التحويل.
عرض نسخة عادية إلى الحافظة؟
import java.util.Date;
// تحتوي هذه الفئة على خمسة متغيرات من أنواع بيانات مختلفة، تتوافق مع خمسة حقول في جدول قاعدة البيانات. المتغير من النوع الخاص، أي أنه يمكنه ذلك فقط
// يمكن الوصول إليها عن طريق الكود الداخلي للفئة، ولا يمكن للعالم الخارجي الوصول إليها إلا من خلال أساليب Setter/Geter المقابلة لهذه المتغيرات.
الطبقة العامة PeopleEntity {
معرف طويل خاص // رمز تعريف فريد، غالبًا ما يكون عمود معرف متزايدًا تلقائيًا في قاعدة البيانات
اسم السلسلة الخاصة؛ //الاسم
الجنس المنطقي الخاص؛ // الجنس ذكر حقيقي، أنثى كاذبة
عمر خاص ؛ //Age
تاريخ خاص createDate // تاريخ إنشاء السجل. نوع التاريخ هو java.util.Date، وليس java.sql.Date
// الكود التالي هو طريقة Setter/Geter لكل حقل. ارجع إلى القسم 3.5.2، حيث يمكن إنشاء هذه الأساليب تلقائيًا في Eclipse.
public Long getId() {معرف الإرجاع؛}
معرف مجموعة الفراغ العام (Long long1) {id = long1;}
سلسلة عامة getName () {اسم الإرجاع؛}
اسم مجموعة الفراغ العام (سلسلة سلسلة) {اسم = سلسلة؛}
منطقية عامة isSex () {إرجاع الجنس؛}
مجموعة الفراغ العامة (الجنس المنطقي) { this.sex = sex }
public int getAge() {return age;}
مجموعة الفراغ العام (int i) {age = i؛}
التاريخ العام getCreateDate() {return createDate;}
مجموعة الفراغ العام (تاريخ التاريخ) {createDate = date;}
}
import java.util.Date;
// تحتوي هذه الفئة على خمسة متغيرات من أنواع بيانات مختلفة، تتوافق مع خمسة حقول في جدول قاعدة البيانات. المتغير من النوع الخاص، أي أنه يمكنه ذلك فقط
// يمكن الوصول إليها عن طريق الكود الداخلي للفئة، ولا يمكن للعالم الخارجي الوصول إليها إلا من خلال أساليب Setter/Geter المقابلة لهذه المتغيرات.
الطبقة العامة PeopleEntity {
معرف طويل خاص // رمز تعريف فريد، غالبًا ما يكون عمود معرف متزايدًا تلقائيًا في قاعدة البيانات
اسم السلسلة الخاصة؛ //الاسم
الجنس المنطقي الخاص؛ // الجنس ذكر حقيقي، أنثى كاذبة
عمر خاص ؛ //Age
تاريخ خاص createDate // تاريخ إنشاء السجل. نوع التاريخ هو java.util.Date، وليس java.sql.Date
// الكود التالي هو طريقة Setter/Geter لكل حقل. ارجع إلى القسم 3.5.2، حيث يمكن إنشاء هذه الأساليب تلقائيًا في Eclipse.
public Long getId() {معرف الإرجاع؛}
معرف مجموعة الفراغ العام (Long long1) {id = long1;}
سلسلة عامة getName () {اسم الإرجاع؛}
اسم مجموعة الفراغ العام (سلسلة سلسلة) {اسم = سلسلة؛}
منطقية عامة isSex () {إرجاع الجنس؛}
مجموعة الفراغ العامة (الجنس المنطقي) { this.sex = sex }
public int getAge() {return age;}
مجموعة الفراغ العام (int i) {age = i؛}
التاريخ العام getCreateDate() {return createDate;}
مجموعة الفراغ العام (تاريخ التاريخ) {createDate = date;}
}
بالإضافة إلى ذلك، هناك واجهة مغلفة للحصول على البيانات:
عرض نسخة عادية إلى الحافظة؟
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
// أنشئ مصنعًا لكائنات PeopleEntity، وأنشئ ثلاثة كائنات PeopleEntry، ثم قم بتحميلها في مجموعة القائمة للعودة
الطبقة العامة PeopleFactory {
public static List<PeopleEntity> getPeoples() { // الطريقة الثابتة للمصنع
List<PeopleEntity> list = new ArrayList<PeopleEntity>();
{ // كائن فئة الكيان الأول
PeopleEntity o = new PeopleEntity();
o.setId(new Long(1));// تم تعريف نوع حقل المعرف على أنه طويل، لذا يجب تحويله
o.setName("تشن جانج");
o.setSex(true);
o.setAge(28);
o.setCreateDate(new Date()); // التاريخ الحالي
list.add(o);
}
{ // كائن فئة الكيان الثاني
PeopleEntity o = new PeopleEntity();
o.setId(2L); // استخدم وظيفة الملاكمة التلقائية لـ JDK5.0 لحفظ التحويل من كائن طويل إلى كائن طويل
o.setName("القراءة الأسبوعية");
o.setSex(false);
o.setAge(18);
o.setCreateDate(new Date());
list.add(o);
}
{ // كائن فئة الكيان الثالث
PeopleEntity o = new PeopleEntity();
o.setId(3L);
o.setName("تشن تشانجين");
o.setSex(true);
o.setAge(27);
o.setCreateDate(new Date());
list.add(o);
}
قائمة العودة؛
}
}
هذه المقالة مأخوذة من مدونة CSDN، يرجى الإشارة إلى المصدر عند إعادة الطباعة: http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx.
-