屏幕上只允许1(子)JFrame

TU_*_*KAI 3 java swing jframe

我有一个主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);


}



}  
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:还有其他方法我只能打开一个子框架(这意味着当该子框架打开时,单击主框架中的按钮除了关闭该子框架外什么都不做)?

And*_*son 6

请改用模态对话框.有关更多详细信息,请参见如何创建对话框.

对话可以是模态的.当模态对话框可见时,它会阻止用户输入程序中的所有其他窗口.JOptionPane创造JDialogs出模态.要创建非模态对话框,必须JDialog直接使用该类.


Ern*_*ill 6

这似乎是一种很好的方式,但是,还有其他方法.您的类可以将子项的引用保留JFrame 为成员变量.该按钮可以检查该成员是否被null处置,如果是,则创建一个新成员; 但除此之外它可以把现有的孩子带到前面.