Разместите рамку в конструкторе - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу разместить фрейм в его конструкторе, когда условие истинно.

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 Ответ

0 голосов
/ 08 декабря 2018

Обратите внимание, что ваш вопрос является классическим вопросом типа " XY Problem ", где вы задаете вопрос "как мне сделать X", когда лучшим решением является "Не делай X, а вместо этого делай Y".Другими словами, вы определенно не хотите распоряжаться оконным объектом верхнего уровня, таким как JFrame, в своем конструкторе, как вы пытаетесь это сделать.

Я думаю, что вы хотитесделать (предположение) значит

  1. проверить конфигурацию вещей
  2. Если все в порядке, отобразить основной графический интерфейс пользователя
  3. Если не в порядке, отобразить окно, котороепозволяет пользователю переустанавливать конфигурацию
  4. Ключевой момент: затем повторно проверить, если конфигурация в порядке,
  5. И если так, то отобразить основной графический интерфейс пользователя
  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, а скорее модальным JDialog
  • Таким образом, поток кода программы останавливается, пока отображается диалоговое окно, и возобновляется только после того, как диалог обработан.
  • Это позволяет коду внутри цикла while запрашивать у диалогового окна состояние его полей и использовать его для повторной проверки того, что конфигурация в порядке *
...