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