سؤال

انا املك 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 (التحكم) لتعيين عنصر التحكم الذي تريد إظهاره في خلية الجدول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top