【问题标题】:JFace : Adding images to a table viewer is creating an issueJFace:将图像添加到表格查看器会产生问题
【发布时间】:2016-03-20 18:41:33
【问题描述】:

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

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”和后续列中的其余字符串。我在这里做错了什么?如何从第二列添加表格项目?

【问题讨论】:

    标签: java swt jface tableviewer


    【解决方案1】:

    表格中的每一列都可以有图片和文字。

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

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

    如果您不想在第一列中显示文本,则将该列的文本设置为空白:

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

    更新:

    您还可以使用

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

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

    【讨论】:

    • 是的,这种方法可以用来解决我的问题,但我想知道除了将第一列的文本设置为空字符串之外是否还有其他方法?
    • 不太确定你在问什么。添加了更多选项的详细信息
    【解决方案2】:

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

    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
    
    );
    

    【讨论】:

    • 是的,这种方法可以用来解决我的问题,但我想知道除了将第一列的文本设置为空字符串之外是否还有其他方法?
    • 是的,如上所述,您应该考虑使用 Content 和 Labelproviders。在上面添加了一个示例代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多