Обновление java JFrame исправляет другой JFrame

У меня есть экран (JFrame), который берет часть своего начального заполнения из файла. Однако, если файл по какой-либо причине отсутствует или заполнен неправильно, то многие поля блокируются как нередактируемые, и пользователь вынужден нажать кнопку настроек, что создает еще один экран JFrame. Если пользователь затем правильно обновит файл, я хочу, чтобы исходный экран был повторно заполнен новыми данными файла, можно ли это сделать?

Итак, у меня есть прослушиватель действий для кнопки настроек, которая вызывает «настройки» класса Java. «настройки» имеют кнопку «Готово», которая активирует обновление базы данных/файлов, успешных обновлений/разблокирует исходный кадр

    btnSettings.setText("Settings");
    btnSettings.setFont(font4);
    btnSettings.setBounds(new Rectangle(15, 515, 140, 40));
    btnSettings.setToolTipText("Default Settings");
    btnSettings.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            settingsPerformed();
        }
    }) ;

private void settingsPerformed() {

    JFrame settings = new Settings();
    settings.setVisible(true);
}

а затем новый класс для настроек

Настройки общедоступного класса расширяют JFrame, реализуют ActionListener {

private.....         
public Settings() {

    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(450, 340));
    this.setTitle("Default Settings");

    this.setBackground(new Color(255, 247, 214));
    this.setResizable(true);
    this.setFont(font1);

    pnlSettingsData.setBounds(new Rectangle(10, 10, 405, 285));
    pnlSettingsData.setBorder(BorderFactory.createLineBorder(Color.blue, 1));
    pnlSettingsData.setName("Settings");
    pnlSettingsData.setLayout(null);  


    btnDone.setText("Done");
    btnDone.setFont(font3);
    btnDone.setBounds(new Rectangle(100, 250, 73, 20));
    btnDone.setToolTipText("Click when ready for updating");
    btnDone.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                    doneActionPerformed(evt);
                    setVisible(false) ;
            }
    });


    this.getContentPane().add(pnlSettingsData, null);            
    setDefaultCloseOperation(HIDE_ON_CLOSE);
    setLocation(150,200);
    //pack();
    setVisible(true);
}


private void doneActionPerformed(ActionEvent evt) { 

    // include here the data base updates      
}   

public void actionPerformed(ActionEvent e) {
}

}


person Andy Ferenczy    schedule 08.03.2013    source источник
comment
Ознакомьтесь также с Использование нескольких JFrames, хорошая/плохая практика?. Вместо этого рассмотрите возможность использования модального JDialog (с соответствующим владельцем).   -  person Guillaume Polet    schedule 09.03.2013
comment
@GuillaumePolet +1 Это то, что я собирался предложить :)   -  person Eng.Fouad    schedule 09.03.2013
comment
В вашем примере второй кадр НЕ БУДЕТ блокировать первый, это роль JDialog, см. Как использовать диалоги, чтобы узнать больше.   -  person MadProgrammer    schedule 09.03.2013


Ответы (1)


Ты мог бы ...

  1. Используйте модальный JDialog для сбора информации от пользователя, и когда он будет закрыт, вы сможете перезагрузить файл из текущего кадра.
  2. Разрешить первому фрейму зарегистрировать действие, прослушать второй фрейм, который при вызове (предположительно, когда пользователь нажимает кнопку «Принять»), вы затем перезагрузите файл и обновите пользовательский интерфейс.
person MadProgrammer    schedule 08.03.2013
comment
Спасибо за ответы, разобрался, что делать, вместе с небольшим редизайном для удаления нескольких фреймов и использования JDialog - person Andy Ferenczy; 11.03.2013