1

我正在制作一个允许用户查看存储在不同数据库中的任务列表的应用程序。所以发生的事情是,我有一个可浏览数据库的名称列表(存储为文本文件)。程序加载该列表中的第一个数据库并显示内容。然后从一个菜单中,我允许用户在列表中选择另一个数据库。(有点像,我想查看安迪的任务,现在是鲍勃,现在是卡尔......)。

问题是,我不知道如何更新 UI 以便显示新数据库的内容。删除当前列出的任务,从数据库中读取,然后重新填充是微不足道的。但是我无法访问此代码(来自我的 Singleton 数据库驱动程序),因为我需要访问已加载到 EventQueue 的 Runnable 实例(我的所有 JComponent 都是私有的,就像我迄今为止遇到的所有教程一样)。我正在查看 EventQueue 中的 get/peek 方法,但它们似乎不是我需要的,因为它们返回 AWTEvents,而且除了 java.lang.Object 之外,我没有看到 AWTEvent 和 Runnable 之间的任何关系。

那么,是否有可能获得当前的 Runnable?如何?

提前感谢您的任何指导。

4

2 回答 2

3

Swing 中有一个很好的关于Concurency 的教程,没有人知道,那已经过时了

你有两个选择

1) Runnable#Thread,但是所有到 GUI 的输出都必须包装成invokeLater(),更多细节在教程中关于Concurency in Swing

2) 或使用SwingWorker

于 2011-11-05T17:20:29.670 回答
2

我怀疑你做错了。您要做的是从控制类中更改数据库(使用 MVC 命名法)。例如,假设您将可用数据库加载到 JList 中,然后在该组件的控件中,例如 ListSelectionListener,您执行一个 SwingWorker 来加载新数据库,然后通过其发布/进程对在 GUI 中显示结果方法或在 done 方法中。数据库代码(模型)应该对代码的视图或 GUI 部分(你称之为 Runnable)一无所知。

于 2011-11-05T20:06:03.560 回答