java - 如何更新 TableViewer 中的 ProgressBar?

标签 java eclipse eclipse-plugin

在我的 TableViewer 中,我有一个 OwnerDrawLabelProvider,我为表格中的特定列添加了一个 ProgressBar 到 TableEditor 实例。

我的问题如下:

我能够设置 ProgressBar 的选择,但在尝试更新时它保持相同的值。

代码:

@Override
public void update(ViewerCell cell) {
if(columnIndex == 4){

            Table table = tableViewer.getTable();
            TableItem item;
            TableItem[] items;
            TableEditor editor;             

            items = table.getItems();
            ProgressBar bar = new ProgressBar(table, SWT.NONE);
            bar.setMinimum(0);
            bar.setMaximum(100);
            bar.setState(SWT.NORMAL);
            bar.setSelection(0);
            bar.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
            if(mediator.isSent()){
                List<Item> itemsSendToSubmit = mediator.getItemsSendToSubmit();
                if(!itemsSendToSubmit.isEmpty()){
                    for(Iterator<Item> itemIterator = itemsSendToSubmit.iterator(); itemIterator.hasNext(); )
                    {
                        Item itemSubmited = itemIterator.next();                        
                        for(TableItem tableItem: items)
                        {                               if(tableItem.getText(0).contains(itemSubmited.getId())) 
                            {                   
                            bar.setSelection(PluginUtility.getBuildProgress(itemSubmited.getPlan()));
                                editor = new TableEditor(table);
                                editor.grabHorizontal = true;
                                editor.grabVertical = true;

                                editor.setEditor(bar, tableItem, 4);                    

                            }
                        }                   
                    }
                }
            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

我读到一个问题,即 ProgressBar 的 setSelection 方法有一些问题。我通过扩展基类创建了自己的 ProgressBar,并使用修复代码覆盖了 setSelection 方法,但仍然不起作用。

在正常的主函数中,这是可行的。

我能否就可能出现的问题或在 TableViewer 中添加此 ProgressBar 如何影响其行为获得一些建议?

编辑:如果我在创建标签提供程序时创建进度条的单个实例,然后将其传递给表格编辑器,它将更新我所说的最后一个元素的进度条 editor.setEditor(bar, tableItem, 4); 但我需要为每个项目显示一个进度条并为每个项目更新它!

最佳答案

也许发生了更新,但视觉效果并未更新,具体取决于您如何调用此代码。

您必须确保在执行此更新时没有调动 ui 线程。

在 eclipse 3.x 中这意味着使用

Display.getDefault().asyncExec(new Runnable() {
  public void run() {
    // ... do any work that updates the screen ...
  }
});

或者在 4.x 中使用注入(inject)获取 UISynchronize

基本上将 setSelection 代码放在那里。

请参阅这篇关于 eclipse 插件后台处理的文章: http://www.vogella.com/tutorials/EclipseJobs/article.html

关于java - 如何更新 TableViewer 中的 ProgressBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073279/

相关文章:

java - 远程 Selenium 2 Webdriver 实例如何接受不受信任的证书?

java - 针对这种情况如何设计数据库?

java - 编程 Eclipse 插件用于在项目中搜索文件(需要基本帮助)

java - 使用 org.eclipse.core.expressions : expressionLanguage. 找不到 exsd

eclipse - 无法删除 Eclipse 工具栏中的新元素

java - 如何从 java http 请求读取 XML?

java - Eclipse 崩溃,现在未生成 R 文件

javascript - 自动完成 HTML 中可用的 CSS 类 Eclipse 中的 JavaScript jQuery

javascript - Eclipse 挂起 JavaScript 文件的复制/剪切

eclipse - Eclipse 中的 "Unknown response received from cvs server"