动态更改Swing控件

时间:2014-01-13 20:23:23

标签: java swing updates swingx jxtreetable

我有一个使用JXTreeTable Java Swing 对话框。我需要能够定期向JXTreeTable添加内容(例如,每分钟一次)。如何从其他班级访问JXTreeTable

我已经习惯使用ExtendScript / JavaScript来说frame.JXTreeTable.contents = x之类的内容来设置TreeTable的内容。当然,在Java中它远没有那么容易。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

同样,与my answer to your other question一样,您需要考虑修改表格的代码应该在哪里。

问问自己为什么修改表的代码不在对话框本身?

例如,如果对话框不了解数据库,则需要将数据库连接传递到对话框中,以便它可以自行执行任何与数据库相关的函数。

再次,将您的窗户视为房间。你可能在客厅里有一堆文件,但是你要放那些文件的桌子就在餐厅里。你不要试图从起居室里把餐桌放在餐桌上。相反,你把报纸带到餐厅,把它们放在桌子上。

同样,如果要在对话框中的表中显示数据,可以将数据集传递给对话框,也可以将数据库连接传递给对话框,然后查找数据以填充表。

答案 1 :(得分:0)

您可以使用任意数量的选项,具体取决于您希望实现的目标......

你可以......

TreeModel传递给负责执行更新的类。

这有点令人不安,因为它提供了对您可能不想提供给其他类的TreeModel的访问权限,这些类可以突然对您可能不希望它们的模型执行操作,例如更改根不是,删除节点,将节点添加到你不想添加的地方......

它还假定了树结构的常识。例如,您可能只希望更新发生在某个子树中,这现在要求更新类隐式地知道这一点。

它还可以锁定您将来可能不需要的TreeModel,特别是如果您想重新使用更新代码...

你可以......

在更新类中使用观察者模式甚至是生产者/消费者模式。

基本上这意味着更新类只是“填充”并触发事件以通知任何可能感兴趣的人发生了更改。你在Swing中看到了这个概念。

这样做的好处是可以将代码的更新部分与模型和UI分离,使代码更加灵活,并减少对代码其他部分的假设。

然后由观察者/听众决定如何响应这些更新和更改,使代码更加灵活。

这意味着你可以更改更新代码(只要观察者界面没有改变)它就不会影响那些对结果感兴趣的人......

答案 2 :(得分:-1)

你需要让你的JXTreeTable成为它所在的类中的一个公共变量(比方说AwesomeDialog)。然后你可以通过带有点符号的AwesomeDialog实例访问它,例如dialog.table

可能退房: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html