Включение и отключение кнопки в зависимости от того, открыт ли кадр - PullRequest
3 голосов
/ 03 апреля 2012

У меня есть кнопка, которая открывает рамку.Есть ли способ включить / отключить кнопку в зависимости от того, открыт ли кадр?

Допустим, если рамка открыта, я бы хотел, чтобы кнопка была button.enabled(false).Но как только рамка закрыта, я хотел бы изменить ее на button.enabled(true).

В моем методе actionPerformed кнопки я делаю это

JFrame testFrame = new JFrame();
testFrame.setSize(100,100);
testFrame.setVisible(true);

Однако я неНе хочу открывать более одного из этих кадров одновременно.Таким образом, пока рамка, созданная нажатием кнопки, открыта, я хочу, чтобы кнопка отключалась до тех пор, пока рамка не будет закрыта.(Даже если рамка не видна, я все еще не хочу открывать другую)

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Если вы хотите, чтобы кнопка создавала только одно окно, я бы предпочел вместо того, чтобы отключить включение кнопки, у вас есть указатель на один JFrame, поэтому где-то в вашем коде есть переменная класса:

JFrame myFrame = null;

Тогда код кнопки должен быть:

If (myFrame == null) {
    myframe = new JFrame();
    //set up the frame etc
    myFrame.setVisible();
} else {
    myFrame.setVisible();
    //code to bring focus to myFrame
}

Если честно, я не могу вспомнить лучший способ привлечь внимание к окну, но вот несколько ссылок:

Как вывести окно на фронт?
http://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2006-06/msg00152.html

3 голосов
/ 03 апреля 2012

Возможно, вам не следует открывать зависимое окно в виде JFrame из другого графического интерфейса. Скорее всего, вам гораздо лучше открывать диалог, такой как модальный или немодальный JDialog или JOptionPane. Пожалуйста, поймите, что любой из этих двух критериев может содержать очень сложные графические интерфейсы. Например, пожалуйста, посмотрите здесь пример: Как вы вернете значение из java-качели-окна-закрывает-от-кнопки

Кроме того, если ваша диалоговая переменная является полем вашего класса, то она создается только один раз, и вы не можете отобразить два из этих окон, даже если кнопка для ее отображения нажата более одного раза.

Ваш код может выглядеть примерно так ...

// testDialog is a JDialog field. and this line is called in 
// the class constructor.
JDialog testDialog = new JDialog(theCurrentJFrame, "Dialog Title", false); // true 
                                                                    // if modal

// this line is called in the button's ActionListener.
testDialog.pack(); // Never set the size of your GUI's. 
                   // Let the layout managers do this for you.
testDialog.setVisible(true);
3 голосов
/ 03 апреля 2012

Добавьте прослушиватель onClose, который активирует кнопку, когда пользователь (или программа) закрывает фрейм. Аналогичным образом добавьте строку, чтобы отключить кнопку вызова, которая в первую очередь открывает кадр.

...