【问题标题】:Changing a Swing control dynamically动态更改 Swing 控件
【发布时间】:2014-01-13 20:23:22
【问题描述】:

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

我已经习惯了 ExtendScript/JavaScript,以至于我想说frame.JXTreeTable.contents = x 之类的东西来设置TreeTable 的内容。当然,Java 远没有这么简单。我怎样才能做到这一点?

【问题讨论】:

  • “当然,Java 远没有这么简单,..” 这几乎意味着有一种语言可以这么简单。那是什么语言?顺便说一句 - “这是我当前的 Java 代码” 很少有人会关注链接。发布MCVE
  • 我很乐意,但我现在所拥有的还远未完成。我什至看不出如何只提取其中的一小部分来说明我遇到的问题,因为我的问题很可能只是我试图将我的头脑围绕在 Java 上(以及一般的 OOP,老实说)。
  • 我已从中删除了一个死回购链接,这使问题变得相当空洞。如果您仍然可以访问旧代码,请在其中进行编辑。

标签: java swing updates swingx jxtreetable


【解决方案1】:

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

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

例如,如果您的对话框不知道数据库,那么您需要将数据库连接传递给对话框,以便它可以自己执行任何与数据库相关的功能。

再次,将您的窗户视为房间。你可能在客厅里放着一堆文件,但你想放这些文件的桌子在餐厅里。你不要试图从客厅里把文件放在餐厅的桌子上。取而代之的是,您将文件带到餐厅并将它们放在那里的桌子上。

同样,如果您想在对话框中的表格中显示数据,您可以将数据集传递给对话框,或者将数据库连接传递给对话框,然后它会查找数据以填充表格。

【讨论】:

    【解决方案2】:

    您可以选择任意数量的选项,具体取决于您想要实现的目标...

    你可以...

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

    这有点麻烦,因为它提供了对您可能不想提供给其他类的TreeModel 的访问,这些类可以突然对模型执行您可能不希望它们执行的操作,例如更改根不,删除节点,将节点添加到您不希望添加它们的位置...

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

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

    你可以...

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

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

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

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

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

    【讨论】:

    • 谢谢@MadProgrammer,这实际上有点道理。我将花一些时间探索您的答案并更多地使用代码,看看我是否可以更有意义地理解它。 (不是你;是我。说真的。)
    【解决方案3】:

    您需要使您的 JXTreeTable 成为它所在的类中的公共变量(比如说 AwesomeDialog)。然后你可以通过 AwesomeDialog 的实例使用点符号来访问它,例如对话框.table

    大概看看: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

    【讨论】:

    • 亲爱的主人,没有。您很少希望公开任何组件,它允许其他代码不仅可以访问有问题的组件,还可以访问组件的整个层次结构,允许它使用它(和父组件)做一些不应该被允许的事情到..
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多