【发布时间】:2015-08-18 13:04:51
【问题描述】:
在我的 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 方法,但仍然无法正常工作。
在正常的 main 函数中,这是可行的。
我能否就问题所在或在 TableViewer 中添加此 ProgressBar 会如何影响其行为获得一些建议?
编辑:如果我在创建标签提供程序时创建一个进度条实例,然后将其传递给 tableeditor,它将更新我说的最后一个元素的进度条 editor.setEditor(bar, tableItem, 4); 但我需要为每个项目显示一个进度条并为每个项目更新它!
【问题讨论】:
-
您是否在更新同一个 ProgressBar 实例?或者您在每次更新时创建一个新的。如果你使用同一个实例,你应该只调用 setSelection( ... ); 来更新它的状态;
-
每次更新都有一个新实例。事实上,这并不重要,因为我总是创建编辑器并为其设置新实例。
-
你能说出这张桌子有多少物品吗?对于大量项目,我建议绘制进度条以节省资源。
-
我不知道表格会有多少项目,那是动态的!
标签: java eclipse eclipse-plugin