JFace:将图像添加到表查看器是一个问题

时间:2014-06-09 09:37:01

标签: java swt jface tableviewer

我有一个包含5列的表查看器。在第1列中,我检查了一些条件并添加了一个图像,其余列将包含文本,但是当我尝试添加图像然后添加其余列的文本时,第二列的文本就位于在第1列的图像旁边。这是我的示例代码段:

TableItem item = new TableItem(table, SWT.NONE);
if(condition) {
item.setImage(image);
}
else {
item.setImage(image);
}
item.setText(new String[]{"street", "city","state","Zip Code"});

问题是字符串" street"坐在第一列本身的图像旁边,但我想要字符串" street"在第二列和后续列中的其余字符串。我在这做错了什么?如何从第2列添加表项?

2 个答案:

答案 0 :(得分:0)

表格中的每一列都可以同时包含图片和文字。

调用item.setImage(image)设置第一列的图像。

调用item.setText(String [])设置从第一列开始的每列的文本。所以你的街道"在图像旁边。

如果您不想在第一列中添加文字,请将该列的文字设为空白:

item.setText(new String[]{"", "street", "city", "state", "Zip Code"});

更新

您还可以使用

设置各列的文本
item.setText(column, text);

如果您使用TableViewer,则不应使用TableItem,而应使用标签提供商和内容提供商。

答案 1 :(得分:0)

不太清楚。如果您只需要第一个列中的图像,那么只需提供一个空字符串:

item.setText(new String[]{"", "street", "city","state","Zip Code"});

但是如果不使用ContentProvider和LabelProvider的好处,就不值得使用jface。所以你应该在做这样的事情之前阅读一些jface教程。

示例:

  TableViewer tableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
      tableViewer.setContentProvider(ArrayContentProvider.getInstance());

      TableViewerColumn tableViewerColumnImg = new TableViewerColumn(tableViewer, SWT.NONE);
      tableViewerColumnImg.setLabelProvider(new ColumnLabelProvider()
      {
         @Override
         public Image getImage(Object element)
         {
            Person p = (Person) element;
            return p.getImage();
         }
      });
      TableColumn tblclmnImg = tableViewerColumnImg.getColumn();
      tblclmnImg.setWidth(100);
      tblclmnImg.setText("Img");

      TableViewerColumn tableViewerColumnStreet = new TableViewerColumn(tableViewer, SWT.NONE);
      tableViewerColumnStreet.setLabelProvider(new ColumnLabelProvider()
      {
         @Override
         public String getText(Object element)
         {
            Person p = (Person) element;
            return p.getStreet();
         }
      });
      TableColumn tblclmnStreet = tableViewerColumnStreet.getColumn();
      tblclmnStreet.setWidth(100);
      tblclmnStreet.setText("Street");


      tableViewer.setInput(//set an array of persons here

);