【问题标题】:Java TableViewer - change cell image on selectionJava TableViewer - 在选择时更改单元格图像
【发布时间】:2018-09-08 03:22:05
【问题描述】:

我已经按照 Vogella 的 Table Viewer 教程并使用了那里提供的 StyledCellLabelProvider。它会在第三列创建一个 CHECKED 或 UNCHECKED 图标

    col = createTableViewerColumn(titles[3], bounds[3], 3);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return null;
        }

        @Override
        public Image getImage(Object element) {
            if (((Person) element).isMarried()) {
                return CHECKED;
            } else {
                return UNCHECKED;
            }
        }
    });
    col.setEditingSupport(new MarriedEditingSupport(viewer));

创建表格时会相应地绘制列图像,但是当用户单击单元格时如何更改图标? (我想模拟一个复选框)

【问题讨论】:

  • Thia 是 jFace 代码 - 它与 Swing 有什么关系?
  • @AndrewThompson Andrew 这个代码在我看来像 JFace,我认为 Swing 标签是错误的

标签: java swt jface tableviewer


【解决方案1】:

您可以为此使用基于CheckboxCellEditorEditingSupport 类:

class MarriedEditingSupport extends EditingSupport
{
  private final CheckboxCellEditor _editor;

  MarriedEditingSupport(TableViewer viewer)
  {
    super(viewer);

    _editor = new CheckboxCellEditor(viewer.getTable());
  }

  @Override
  protected CellEditor getCellEditor(Object element)
  {
    return _editor;
  }

  @Override
  protected boolean canEdit(Object element)
  {
    return true;
  }

  @Override
  protected Object getValue(Object element)
  {
    return Boolean.valueOf(((Person)element).isMarried());
  }

  @Override
  protected void setValue(Object element, Object value)
  {
    ((Person)element).setMarried(((Boolean)value).booleanValue());

    getViewer().update(element, null);
  }
}

【讨论】:

  • 这行得通,但使用查看器更新方法只会在我将光标移动到单元格后进行视觉更改。相反,我使用了查看器的表格重绘方法(它不包含很多行)。虽然这个正确更新了图标,但如果我真的很快点击开/关,它就会被锁定。猜猜它毕竟不是那么快..您对检查后如何刷新查看器有任何其他想法吗? viewer.refresh() 不起作用。
  • 此代码基于我使用的东西,但我的标签提供程序基于 OwnerDrawLabelProvider.. 我无法重现任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
相关资源
最近更新 更多