غير قادر على رسم مركب في outhersdrawlabelprovider
-
21-09-2019 - |
سؤال
انا املك TableViewer
عنصر واجهة مستخدم مع عمود واحد ، حيث يكون كل صف في محتويات الجدول أ Composite
مع عدد من مصادر الأطفال. يحتوي العمود على مزود تسمية وهو فئة فرعية من OwnerDrawLabelProvider
. من المفترض أن يقدم مزود التسمية Composite
الأطفال في خلية الطاولة ، ولكن متى paint()
يسمى ، لا شيء يتم تقديمه.
لقد وجدت عددًا من الأمثلة حول كيفية رسم عناصر نصية عادية أو مصممة أو بدائية باستخدام GC
في ال Event
تم تمرير الكائن ، ولكن لا شيء على رسم محتويات أ Composite
في منطقة الخلية.
هل هذا ممكن ، وإذا كان الأمر كذلك ، فماذا أفعل خطأ؟
هنا هو الرمز لإنشاء الجدول:
viewer = new TableViewer(container, SWT.NONE);
final Table table = viewer.getTable();
TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.LEFT);
TableColumn tableColumn = viewerColumn.getColumn();
tableColumn.setText(Messages.getString("column.header.name"));
tableColumn.setResizable(true);
tableColumn.setMoveable(false);
tableColumn.setWidth(500);
viewerColumn.setLabelProvider(new CompositeLabelProvider());
ها هي measure
و paint
طرق مزود التسمية المخصصة ، CompositeLabelProvider
:
@Override
protected void measure(Event event, Object element) {
CompositeTableItem row = rowMap.get(element);
Composite contents = row.getContents(viewer.getTable().getParent());
Point size = contents.computeSize(SWT.DEFAULT, SWT.DEFAULT);
event.setBounds(new Rectangle(event.x, event.y, size.x, size.y));
}
@Override
protected void paint(Event event, Object element) {
CompositeTableItem row = rowMap.get(element);
Composite contents = row.getContents(viewer.getTable().getParent());
contents.redraw(event.getBounds().x, event.getBounds().y, event.getBounds().width, event.getBounds().height, true);
contents.update();
}
المحلول
أعتقد أن OfferDrawlabelProvider من المفترض استخدامه إذا كنت ترغب في رسم مكونك الخاص باستخدام GC. إذا كنت تريد فقط تقديم عنصر واجهة مستخدم SWT العادية في جدول ، فيجب على الأرجح استخدام TableDitor و #SetEditor (التحكم) لتعيين عنصر التحكم الذي تريد إظهاره في خلية الجدول.