2012-07-19 53 views
1

我在构建一个访问数据库的应用程序,目前我有一个显示主表的SWT Shell。从该表中,用户可以打开单个记录,并且从记录表单内部,用户可以打开另一个相同类型但包含不同数据的表单。 如果以任一形式更新记录,则更新将反映在主窗体中。 我的问题是我无法更新打开的第一个记录表单。 有没有办法强制更新或重新绘制某种类型的所有打开的窗体,或者是否有方法可以同时更新同一类型的多个shell。 下面的屏幕截图显示了我正在尝试做什么。Java SWT从按钮刷新多个壳

enter image description here

截图细节

    • 主要形式
    • 这种形式时任一的2-仲形式更改数据库中的数据目前得到更新。这是通过从辅助形式
    • 这是数据形式的第一个实例重新加载表完成
  • Ç
    • 这是数据的第二实例形成。
    • 它通过单击打开按钮从第一个数据表单打开。我试图做的是当我改变第二种形式的东西时,刷新第一个数据表单。
    • 例如我打开了记录标签295为白色,当我更新数据此记录我想在记录表中显示为26白

我知道这是一个变化很难理解的问题,所以请随时索取更多的细节我正在试图弄清楚这一点。

+0

您的第二个数据表单需要第一个数据表单的实例和传递给它的主表单的实例。这样,您可以从第二个数据表单调用其他数据表单上的方法。您可能需要全局的数据表单实例堆栈,因为您可以继续打开新的数据表单。在创建表单时,您需要在堆栈上推送实例,并在表单关闭时从堆栈中弹出实例。 – 2012-07-19 16:13:37

+0

获取实例以便我可以发送它的最佳方式是什么?或者更好的是,我该如何设置全局堆栈? 谢谢, – Talon06 2012-07-19 16:25:26

回答

2

在主窗体中,您设置了一个Java Stack

Stack<DataForm> stack = new Stack<DataForm>(); 

您将此Stack的引用传递给数据表单。

在数据表单的构造函数中,传递数据表单实例。

stack.push(this); 

在数据表单(退出时)的析构函数中,删除数据表单实例。

int pos = stack.search(this); 
stack.remove(pos); 

当您想要刷新所有表单时,您将循环访问堆栈。

for (DataForm dataForm : stack) { 
    // do the refresh 
} 
+0

我不得不做一个get方法来拉实例正弦''这个'变量拉动事件处理程序。事情似乎正在工作谢谢, – Talon06 2012-07-20 15:55:42