【问题标题】:State of JInternalFrame not keptJInternalFrame 的状态未保留
【发布时间】:2012-06-14 09:32:26
【问题描述】:

我正在处理一个与我认为的这个错误有关的问题:DefaultDesktopManager does not handle InternalFrame state changes as expected.

我有以下场景:

我的应用程序包含一个JFrame,它可以有多个JInternalFrames。作为一个概览对话框,我有一个JInternalFrame,它被最大化并显示了一个数据表。用户可以打开表中实体的详细信息对话框。详细信息对话框也是JInternalFrame

  1. 问题:由于概览对话框已最大化,因此详细对话框也已最大化(与预期不同)。

  2. 问题:关闭详细信息对话框时,概览对话框失去其最大化状态。如果用户单击此对话框中的任何点,它将返回最大化。这对用户来说非常丑陋和困惑。如果我在关闭之前“取消最大化”详细信息对话框,概览对话框也会失去其最大化状态并保持在此状态。

在我看来,JFrame 的所有JInternalFrames 只能保持一个全局状态。我不知道如何为此创建一个简单的解决方法。也许有人过去遇到过这个问题,可以指导我。

提供 SSCCE 有点难,也许这就够了,我正在通过这个来显示详细对话框:

DetailDialog detailDialog = new DetailDialog();
applicationFrame.getDesktopPane().add(detailDialog);
detailDialog.setVisible(true);

【问题讨论】:

    标签: java swing jframe jinternalframe maximize


    【解决方案1】:

    可能是问题

    1. 没有看到你的SSCCE,很难写出明智的东西

    2. 你希望JInternalFrame[] getAllFrames() 的输出是什么,有吗???

    3. Internal Frame Listener 的输出是什么,有吗???

    4. 您是否将 JInternalFrame 放置到 JLayeredPane 中???

    【讨论】:

    • 我添加了一些代码,SSCCE 可能代码有点太多了......我不使用 2. 和 3. 所以我不希望这里有任何东西(我应该怎么做?)。 4. 我没有使用LayeredPane,如果它可以帮助我,我会看看这个课程。
    • 从 JInternalFrame[] getAllFrames() 你可以得到所有 JInternalFrames 和 Internal Frame Listener 谈论所有实现的事件,其中一部分(我试过了,也许是全部)你可以用 PropertyChangeListener 提供
    • 我知道他们在做什么,但我希望有人有一个想法阻止我实现 Swing 应该做的事情。
    【解决方案2】:

    我发现了我的错误。我正在为对话框使用控制器类,并将对话框的关闭委托给该类。例如,在控制器中,我必须进行一些验证,然后调用对话框的dispose()。现在我打电话给setClosed(true),而不是这样。我认为那里缺少一些已触发的事件,这些事件现在已被触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      相关资源
      最近更新 更多