как вызывать только одно окно из тулбара и меню
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);
}
}
}
вызывается два окна, если нажать на тулбаре и тут же нажать в меню
как сделать так, чтобы показывалось только одно окно?
Здравствуйте, sonsen, Вы писали:
Если кратко, то:
SettingsListener sl = new SettingsListener();
mntmSettings.addActionListener(sl);
btnSettings.addActionListener(sl);
Если включить зануду:
Следуйте принятым coding convention и всегда форматируйте код.
Используйте Action вместо ActionListener.
Не забывайте, что если вы добавили слушателя, то возможно его нужно и удалить. Утечка слушателей очень частое явление в Swing приложениях.
Разберитесь с ООП — классами и экземплярами. Вы создаёте диалог и присваиваете его в поле одного слушателя. А потом проверяете поле другого экземпляра слушателя.
Используйте модальные диалоги
Здравствуйте, 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);
//}
}
}
в таком случае, а если раскомментировать строчки то одно окно — но появляется один раз и при нажатии на кнопки больше не открывается
и еще как правильно удалить слушателя?
спасибо
Здравствуйте, 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>как сделать так, чтобы показывалось только одно окно?
Либо вызывать модальное окно, это не даст обратиться куда-либо до закрытия окна.
Либо засинхронизироваться по однуму и тоже же объекту из всех мест вызова окна и из синхрона первым дело проверять, не открыто ли окно.
Если уже открыто и ещё не закрыто, выводить краткое сообщение: "Сожалеем, но окно уже открыто, заходите как-нибудь в следующий раз".