предотвратить Java от нескольких открытий одного и того же окна-JFrame - PullRequest
1 голос
/ 23 февраля 2012

например, я создаю это по щелчку

//this creates autor object with default constructor properties defined in autor class
menuAutor.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e)
            {
                autor Autor = new autor("Autor");
            }
        });

, поэтому создается объект с именем Autor, и когда я снова нажимаю на кнопку, снова появляется тот же объект Autor. Как можно предотвратить открытието же самое окно, если оно уже открыто?

РЕДАКТИРОВАТЬ: ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ!После долгих размышлений об этом ... я сделал свое решение ... значение по умолчанию для autorOpen = "no" я объявил в начале моего класса, просто чтобы вы знали, потому что его не видно в коде ниже, само решение:

public void mouseClicked(MouseEvent e)
            {
                if(autorOpen=="no") {
                autor Autor = new autor("Autor");
                autorOpen = "yes";
                Autor.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e) 
                    {
                        autorOpen = "no";
                    }
                });
                }
                else 
                    JOptionPane.showMessageDialog(null, "Demo notice... you can't open that window again.. its opened already!","Error",JOptionPane.ERROR_MESSAGE);  
            }
        });

Ответы [ 4 ]

3 голосов
/ 23 февраля 2012

Сохраните переменную чуть более глобально, и проверьте, существует ли она, прежде чем создавать новую.

1 голос
/ 23 февраля 2012

Вы также можете рассмотреть реализацию Autor как одноэлементного класса (чтобы гарантировать, что только один когда-либо был создан).

public class Autor {

private static Autor instance = null;

//Must be protected or private, get a reference to this class with getInstance().
protected Autor() {
}


/**
* Returns reference to this class - use in place of constructor
*/
public static Autor getInstance() {
if(instance == null) {
instance = new Autor();
}
return instance;
}
}
0 голосов
/ 23 февраля 2012

Если вы создаете что-то с «новым» при каждом клике, вы будете каждый раз получать новое окно. Одним из решений является создание автора до того, как произойдет какое-либо нажатие, а затем событие переместит его из скрытого в видимое.

0 голосов
/ 23 февраля 2012

Используйте логический флаг, чтобы указать, открыто ли диалоговое окно или нет.Установите значение true, если диалоговое окно появилось, и установите значение false, когда вы закрываете этот диалог.

...