将框架放置在其构造函数中

时间:2018-12-08 13:59:24

标签: java swing constructor jframe dispose

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

this.dispose未布置框架。我希望在调用构造函数时,如果条件(configurationBean.getCode().equals(macPass))为true,则必须调用一个新框架,并且必须关闭该框架。否则,必须创建该框架。

 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 个答案:

答案 0 :(得分:0)

请注意,您的问题是经典的“ XY Problem”类型的问题,当最佳解决方案是“不做X而是做Y”时,您会问“我怎么做X”。换句话说,您确实不想在执行操作时在其构造函数中处理顶级窗口对象(例如JFrame)。

我认为您想做的(猜测)是

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

如果是这样,那么我将使用while循环显示设置的配置窗口,如果配置确定,则退出循环,但是如果用户只是想退出或无法设置,则允许用户退出循环。配置确定。像这样:

// 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循环中的代码查询对话框的字段状态,并使用它重新测试配置是否正确