亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在模型更改時更新虛擬 TableViewer 的條目

在模型更改時更新虛擬 TableViewer 的條目

翻閱古今 2024-01-17 20:52:51
我目前正在重新編碼 TableViewer 以完全虛擬地工作。到目前為止,我對結果非常滿意,但仍然有一個問題,即表中的所有可見元素都是在固定計時器上刷新的。但模型不斷變化。這意味著,如果我在定期更新發生之前單擊某個條目,則表會加載該位置的實際值,但保持所有其他元素不變。由于這就是為 TableViewer 設置的 LazyContentProvider 的工作方式,因此這不是什么大問題。由于我的 TableViewer 是傳入事件的實時查看器,最新條目將所有其他項目向下移動,因此我想在添加新事件時刷新所有可見元素。我嘗試使用 TableViewer.refresh() 添加新項目,但這似乎沒有任何作用。由于完整的代碼非常復雜,并且是更大代碼段的一部分,我將提供代碼的基本表示:public class MyClass{  public TableViewer liveViewer;  public List<String> myItems=new ArrayList<>();  void init(){   liveViewer = new TableViewer(liveComp, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);    liveViewer.setContentProvider(new LiveViewerContentProvider(liveViewer));    liveViewer.setLabelProvider(someLabelProvider);    liveViewer.setUseHashlookup(true);    ClassThatProvidesItems.addListener(new ItemAddedListener(){         @Override         void itemAdded(String item){          myItems.add(0,item);         }    }  }}public class LiveViewerContentProvider implements ILazyContentProvider{    private TableViewer viewer;    private List<String> input;    public LiveViewerContentProvider(TableViewer viewer) {        this.viewer = viewer;    }    @Override    public void dispose() {    }    @Override    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {        this.input = (List<String>) newInput;    }    @Override    public void updateElement(int index) {        viewer.replace(input.get(index), index);    }}我知道,ArrayList 可能不是最好的選擇,因為總是在頭部添加元素,但請暫時忽略它。我嘗試執行 liveViewer.refresh(); 在偵聽器回調結束時,但它似乎沒有刷新我的元素。在添加新項目時,我該怎么做才能強制刷新所有可見項目?
查看完整描述

1 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

我剛剛注意到,我的解決方案幾乎有效。問題是,整個代碼位于一個奇怪的 try-catch-block 中的某個地方,它只是默默地吞噬了異常,并且沒有給我無效的線程訪問異常,而我應該因為沒有在其中執行 liveViewer.refresh 而得到該異常顯示線程。像這樣換行解決了問題:


Display.getDefault().asyncExec(new Runnable() {

                    @Override

                    public void run() {

                        liveViewer.refresh();

                    }

                });


查看完整回答
反對 回復 2024-01-17
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號