I have a window, which is the main window in my app and it contains buttons. On clicking on one of them, a child JFrame appears and if I click again another frame appears and this can be continuous depending on how many clicks are made. What I want, is when I click on the JButton once only one frame should open and since this frame is open no other similar frames can be opened upon clicking on the button for the second time until the first child frame is closed. 
            Asked
            
        
        
            Active
            
        
            Viewed 89 times
        
    0
            
            
         
    
    
        Andrew Thompson
        
- 168,117
- 40
- 217
- 433
 
    
    
        user3862042
        
- 21
- 1
- 4
- 8
- 
                    1See [The Use of Multiple JFrames, Good/Bad Practice?](http://stackoverflow.com/q/9554636/418556) – Andrew Thompson Aug 04 '14 at 10:27
1 Answers
2
            
            
        This can be done by opening a Modal dialog box instead of a jFrame. See How to Use Modality in Dialogs for more information.
Here is a simple example from A Simple Modal Dialog:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class AboutDialog extends JDialog implements ActionListener {
  public AboutDialog(JFrame parent, String title, String message) {
    super(parent, title, true);
    if (parent != null) {
      Dimension parentSize = parent.getSize(); 
      Point p = parent.getLocation(); 
      setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);
    }
    JPanel messagePane = new JPanel();
    messagePane.add(new JLabel(message));
    getContentPane().add(messagePane);
    JPanel buttonPane = new JPanel();
    JButton button = new JButton("OK"); 
    buttonPane.add(button); 
    button.addActionListener(this);
    getContentPane().add(buttonPane, BorderLayout.SOUTH);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    pack(); 
    setVisible(true);
  }
  public void actionPerformed(ActionEvent e) {
    setVisible(false); 
    dispose(); 
  }
  public static void main(String[] a) {
    AboutDialog dlg = new AboutDialog(new JFrame(), "title", "message");
  }
}
 
    
    
        DavidPostill
        
- 7,734
- 9
- 41
- 60
- 
                    +1, but `setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);` should better be `setLocationRelativeTo(parent)`. – Andrew Thompson Aug 04 '14 at 10:30
- 
                    Thank u for ur answers. There is no way doing that using Jframes ?? – user3862042 Aug 04 '14 at 10:47