我有一个使用JXTreeTable
的 Java Swing 对话框。我需要能够定期向JXTreeTable
添加内容(例如,每分钟一次)。如何从其他班级访问JXTreeTable
?
我已经习惯使用ExtendScript / JavaScript来说frame.JXTreeTable.contents = x
之类的内容来设置TreeTable
的内容。当然,在Java中它远没有那么容易。我怎么能做到这一点?
答案 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