[英]SWT Table, TableViewer, Refreshing Table on Data Change
我非常需要一些指導幫助。 我已經能夠完成並開始使用 Tables 和 TableViewers 的代碼示例。 但是我沒有找到任何示例來幫助我進行粒子設置。
請指導我正確的方向。
我的課程:
AHandler.java - 這允許用戶從鼠標右鍵單擊中選擇數據。 在執行過程中,我調用了一個單例類來將用戶選擇的數據添加到一個數組列表中。
ASelectedData.getInstance().add(tcRevision, selectedDataset);
ASelectedData.java - 是將用戶選擇添加到 ArrayList 的單例類。
ABase.java - 此對話框通過單擊菜單打開。 該對話框應顯示一個表,其中包含來自 ArrayList 的值。 執行其他操作的一些按鈕。
我現在擁有它的方式是在 ABase.java 類中創建表和 tableviewer。 我正在從中提取表格的信息。
viewer.setContentProvider(new ArrayContentProvider());
viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());
這將使用正確的數據填充表。
但是 ABase.java 類是無模型的。 那么為什么該對話框是打開的,用戶可以繼續使用鼠標右鍵選擇數據並添加到數組列表中。 但是我對表格進行編碼的方式我必須重新打開窗口才能更新數據。
* 編輯* ***在我的主 GUI 中,我創建了一個 TableViewer。 TableViewer 創建一個表,在單獨的類中顯示來自數組列表的數據。 問題是用戶仍然可以轉到主應用程序 GUI(不是我的應用程序 GUI)並在我的 GUI 仍然打開時選擇更多數據。 他們希望在選擇表時看到添加到表中的新數據。
問題是我知道沒有辦法告訴表新數據已經到達所以刷新表。 獲取數據並將其添加到 ArrayList 的 Add 方法位於 ASelectedData 類中。 不是創建 tableviewer 的類。
當執行添加方法時,我需要一種方法來告訴表刷新。 問題是表和方法在兩個不同的類中。
希望這更有意義
編輯*
我的主要 GUI 與 TableViewer
public AplotBaseDialog(Shell shell, TCSession theSession) Constructor
//////////////////////////////////////////////////////////////////////////
// createTableViewer() //
//////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
createColumns(parent, viewer);
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());
// Layout the viewer
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalSpan = 2;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
viewer.getControl().setLayoutData(gridData);
return viewer;
}
//////////////////////////////////////////////////////////////////////////
// updateTableViewer() //
//////////////////////////////////////////////////////////////////////////
public void updateTableViewer() {
viewer.refresh();
}
添加到其他類的代碼
AplotBaseDialog abd = new AplotBaseDialog(null, null);
public void add(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
AplotDatasetData pp = new AplotDatasetData(tcRevision, selectedDataset);
if (!dataArrayList.contains(pp)) {
dataArrayList.add(pp);
}
abd.updateTableViewer();
}// end add()
雖然您的問題尚未完成,但我會嘗試猜測您的問題:您在Dialog
有一個TableViewer
,您可以從主 GUI 編輯ModelProvider
。 現在您想知道如何更新表格,當您向模型添加內容時,是否正確?
如果是這樣,您可以在對話框中提供一個方法來更新對話框中的TableViewer
。 像這樣的東西:
public void updateTableViewer()
{
if(viewer != null)
viewer.refresh();
}
當您向ModelProvider
添加內容時,您可以從主 gui 調用此方法。
如果這不是您的問題,請更新您的原始帖子。
在創建控件中添加這堆代碼可能會解決您的問題:
ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
@Override
public void resourceChanged(IResourceChangeEvent event) {
treeViewer.refresh();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.