Разрешить только 1 (дочерний) JFrame на экране - PullRequest
3 голосов
/ 18 марта 2012

У меня есть главный JFrame.Внутри рамки есть кнопка.Когда я нажимаю кнопку, она открывает дочерний фрейм.

Но я хочу, чтобы только 1 дочерний фрейм был открыт в любой момент (вместо этого, когда я снова нажимаю кнопку, он дает мне второй дочерний фрейм, искоро...).

Итак, я добавил actionListener к кнопке, чтобы отключить его при открытии дочернего фрейма, и добавил windowListener к дочернему фрейму, чтобы при нажатии кнопки закрытия в правом верхнем углу онсделать кнопку (на главном кадре) способной.

Вот мой код:

 import java.awt.Button;
 import java.awt.EventQueue;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import javax.swing.JButton;

 import javax.swing.JFrame;

 public class Form1 extends JFrame implements ActionListener{
 JButton btn1=new JButton("help");

public Form1() {
    super("Form 1");
    this.add(btn1);        
    setSize(200, 200);
    btn1.addActionListener(this);
    setVisible(true);
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==btn1){
        btn1.setEnabled(false);
        final Form2 x= new Form2();
        x.addWindowListener(new WindowAdapter(){
        @Override
        public void windowClosing(WindowEvent e){
        x.dispose();
        btn1.setEnabled(true);


    }    

    });
    }        
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){

        @Override
        public void run() {
             new Form1();

        }
});    

}
}  

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Form2 extends JFrame {
JLabel lbl1=new JLabel("đang mở form 2 - trợ giúp");    
public Form2() {
    super();
    add(lbl1);
    setVisible(true);
    setSize(200, 200);


}



}  

Итак, мой вопрос: есть ли другой способ, которым я мог бы позволить открыть только один дочерний кадр(это означает, что когда этот дочерний кадр открывается, нажатие кнопки в основном кадре ничего не делает, если только этот дочерний кадр не закрыт)?

Ответы [ 3 ]

6 голосов
/ 18 марта 2012

Это кажется хорошим способом, но да, есть и другие способы.Ваш класс может хранить ссылку на дочерний элемент JFrame в качестве переменной-члена.Кнопка может проверить, является ли этот элемент null или расположен, и, если это так, создать нового;но в противном случае это могло бы просто вывести существующего ребенка на передний план.

6 голосов
/ 18 марта 2012

Используйте вместо этого модальное диалоговое окно. См. Как сделать диалоги для более подробной информации.

Диалог может быть модальным . Когда модальный диалог виден, он блокирует ввод данных пользователем во все другие окна программы . JOptionPane создает JDialogs, которые являются модальными. Чтобы создать немодальный диалог, вы должны напрямую использовать класс JDialog.

2 голосов
/ 18 марта 2012

Создайте Form2 заранее и используйте setVisible (true), чтобы показать его, и setVisible (false), чтобы скрыть его.Вот как пример:

if(e.getSource()==btn1){ 
    btn1.setVisible(false); // not really needed if you disable form1 on btn1 press
    form2.setVisible(true);  // show form2
    form1.setVisible(false); // hide form1
}     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...