【问题标题】:Dispose frame In Its Constructor在其构造函数中处理框架
【发布时间】:2018-12-08 13:59:23
【问题描述】:

当条件为真时,我想在其构造函数中处理一个框架。

this.dispose 没有处理框架。我想要这样,当我的构造函数被调用时,如果条件即 (configurationBean.getCode().equals(macPass)) 为真,那么必须调用一个新框架并且必须关闭这个框架。否则必须创建此框架。

 public ConfigurationFrame() {
    String pcMac = getPcMacAddress();
    String macPass = getPassword(pcMac);
    ConfigurationDao configurationDao = new ConfigurationDaoImpl();
    ConfigurationBean configurationBean = configurationDao.checkCode(macPass);
    if(configurationBean == null)
        initComponents();
    else if(configurationBean.getCode().equals(macPass))
    {      
        new MainLoginFrame().setVisible(true);
        this.dispose();
        super.setVisible(false);
    }
}
}

【问题讨论】:

  • 构造函数真的不适合这个。
  • 这是一个非常糟糕的设计方案;根本不这样做
  • 好的。然后给我一些建议。
  • 改为 1) 从不扩展 JFrame,而是扩展或使用 JPanel 并在需要时创建 JFrame 或其他顶级窗口。 2) 对于这样的对话框窗口,使用 modal JDialog 而不是 JFrame。
  • 请考虑展示一个小型演示程序来说明您想要实现的目标,例如minimal reproducible example。还要解释一些背景——什么会使条件为真与假?您尝试显示的窗口的用途是什么?

标签: java swing constructor jframe dispose


【解决方案1】:

请注意,您的问题是经典的“XY Problem”类型问题,您会问“我如何做 X”,而最佳解决方案是“不要做 X,而是做 Y”。换句话说,您肯定不想要在其构造函数中处置顶级窗口对象,例如 JFrame,就像您尝试做的那样。

我认为你想要做的(猜测)是

  1. 测试事物的配置
  2. 如果正常,显示主 GUI
  3. 如果不正常,则显示一个允许用户重新设置配置的窗口
  4. 重点:然后重新测试配置是否OK,
  5. 如果是,则显示主 GUI
  6. 必要时重复。

如果是这样,那么我会使用一个while循环来显示设置配置窗口并在配置正常时退出循环,但如果用户只是想退出或无法设置,也允许用户退出循环配置OK。像这样的:

// configurationGood: true if config is good
// justQuit: true if the user has had enough and wants to quit
while (!configurationGood && !justQuit) {
    // create configuration dialog here
    // calling constructors, and all
    // use a **modal** dialog here

    // change configurationGood and/or justQuit values in here
}

if (!justQuit) {
    // create and display main application here
}

注意

  • 此代码不在任何 GUI 窗口构造函数中调用,而是在显示 GUI 之前调用
  • 重新设置的配置窗口不应该是 JFrame 而是 modal JDialog
  • 这样程序代码流会在显示对话框时暂停,只有在处理完对话框后才会恢复。
  • 这允许 while 循环中的代码查询对话框其字段的状态,并使用它来重新测试配置是否正常

【讨论】:

  • 你的逻辑超出了我的想象......虽然我自己解决了这个问题......得到了朋友的帮助。感谢您的友好回复...
  • @Asmat:逻辑只是布尔检查。什么让你特别困惑?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多