我正在创建一个允许用户查看存储在不同数据库中的任务列表的应用程序。所以会发生的是,我有一个可浏览数据库名称列表(存储为文本文件)。程序加载该列表中的第一个数据库并显示内容。然后从菜单中,我允许用户在列表中选择另一个数据库。 (有点像,我想查看Andy的任务,现在是Bob,现在是Carl ......)。
问题是,我不知道如何更新UI以便显示新数据库的内容。删除当前列出的任务,从数据库中读取,然后重新填充是微不足道的。但我无法访问此代码(来自我的Singleton数据库驱动程序),因为我需要访问我的Runnable实例,该实例已加载到EventQueue(我的所有JComponents都是私有的,就像我到目前为止遇到的所有教程一样) )。我正在查看EventQueue中的get / peek方法,但它们似乎并不是我需要的,因为它们返回AWTEvents并且我没有看到除了java.lang.Object之外的AWTEvent和Runnable之间的任何关系。
那么,是否可以获得当前的Runnable?怎么样?
提前感谢任何指导。
答案 0 :(得分:3)
有一个关于Concurency in Swing的好教程,没有人不能说出来,那是过时的
你有两个选择
1)Runnable#Thread
,但GUI的所有输出必须包含在invokeLater()
中,有关Concurency in Swing
2)或使用SwingWorker
答案 1 :(得分:2)
我怀疑你这是错的。您要做的是从控件类中更改数据库(使用MVC命名法)。例如,假设您将可用数据库加载到JList中,然后在该组件的控件中,比如ListSelectionListener,您执行加载新数据库的SwingWorker,然后通过其发布/处理对在GUI中显示结果。方法或完成方法。数据库代码(模型)应该对代码的视图或GUI部分一无所知(Runnable就像你所说的那样)。