Re: одно диалоговое окно
От: Аноним  
Дата: 19.07.13 11:57
Оценка: -1
Здравствуйте, sonsen, Вы писали:

S>как вызывать только одно окно из тулбара и меню

S>
S>mntmSettings.addActionListener(new settingsListener());
S>btnSettings.addActionListener(new settingsListener()); 
S>public class settingsListener implements ActionListener {
S>    Settings dialog;

S>    @Override
S>    public void actionPerformed(ActionEvent e) {
S>    //    e.toString() == "Settings"
S>        if (dialog == null )
S>        {
S>        dialog = new Settings();
S>        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
S>        dialog.setVisible(true);
S>        }
S>    }
S>}
S>


S>вызывается два окна, если нажать на тулбаре и тут же нажать в меню

S>как сделать так, чтобы показывалось только одно окно?

Либо вызывать модальное окно, это не даст обратиться куда-либо до закрытия окна.

Либо засинхронизироваться по однуму и тоже же объекту из всех мест вызова окна и из синхрона первым дело проверять, не открыто ли окно.
Если уже открыто и ещё не закрыто, выводить краткое сообщение: "Сожалеем, но окно уже открыто, заходите как-нибудь в следующий раз".
одно диалоговое окно
От: sonsen  
Дата: 19.07.13 08:21
Оценка:
как вызывать только одно окно из тулбара и меню

mntmSettings.addActionListener(new settingsListener());
btnSettings.addActionListener(new settingsListener()); 

public class settingsListener implements ActionListener {

    Settings dialog;
    
    @Override
    public void actionPerformed(ActionEvent e) {
    //    e.toString() == "Settings"
        if (dialog == null )
        {
        dialog = new Settings();
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
        }
    }

}


вызывается два окна, если нажать на тулбаре и тут же нажать в меню

как сделать так, чтобы показывалось только одно окно?
Re: одно диалоговое окно
От: Blazkowicz Россия  
Дата: 19.07.13 08:28
Оценка:
Здравствуйте, sonsen, Вы писали:

Если кратко, то:
SettingsListener sl = new SettingsListener();
mntmSettings.addActionListener(sl);
btnSettings.addActionListener(sl);


Если включить зануду:
Следуйте принятым coding convention и всегда форматируйте код.
Используйте Action вместо ActionListener.
Не забывайте, что если вы добавили слушателя, то возможно его нужно и удалить. Утечка слушателей очень частое явление в Swing приложениях.
Разберитесь с ООП — классами и экземплярами. Вы создаёте диалог и присваиваете его в поле одного слушателя. А потом проверяете поле другого экземпляра слушателя.
Используйте модальные диалоги
Re[2]: одно диалоговое окно
От: sonsen  
Дата: 19.07.13 08:50
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

>Вы создаёте диалог и присваиваете его в поле одного слушателя. А потом проверяете поле другого экземпляра слушателя.

с этим понятно, но открывается два диалоговых окна

public class SettingsListener implements ActionListener {

    Settings dialog;
    
    @Override
    public void actionPerformed(ActionEvent e) {
//if(dialog == null) {
        dialog = new Settings();
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
//}
    }

}


в таком случае, а если раскомментировать строчки то одно окно — но появляется один раз и при нажатии на кнопки больше не открывается

и еще как правильно удалить слушателя?

спасибо
Re[3]: одно диалоговое окно
От: Blazkowicz Россия  
Дата: 19.07.13 08:54
Оценка:
Здравствуйте, sonsen, Вы писали:

S>с этим понятно, но открывается два диалоговых окна

Возможно вы уже два раза добавили слушателя. Вот он и вызывается два раза. Поэтому лучше использовать Action, который у контрола один едиентсвенный.

S>в таком случае, а если раскомментировать строчки то одно окно — но появляется один раз и при нажатии на кнопки больше не открывается

Т.е. это не по логике проверка, это вы пытались решить так свою проблему?

S>и еще как правильно удалить слушателя?

removeActionListener?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.