У меня есть окно, которое является главным окном моего приложения и содержит кнопки. При нажатии на один из них появляется дочерний элемент JFrame
, и если я снова нажимаю, появляется другой кадр, и это может быть непрерывным в зависимости от того, сколько кликов сделано. Что я хочу, так это то, что когда я нажимаю на JButton
один раз, должен открываться только один кадр, и, поскольку этот кадр открыт, никакие другие подобные кадры не могут быть открыты при нажатии кнопки во второй раз, пока первый дочерний кадр не будет закрыт.
Дублирование дочернего JFrame по клику
comment
См. Использование нескольких JFrames, хорошая/плохая практика?
- person Andrew Thompson   schedule 04.08.2014
Ответы (1)
Это можно сделать, открыв модальное диалоговое окно вместо jFrame
. Дополнительные сведения см. в разделе Как использовать модальность в диалогах.
Вот простой пример из простого модального диалогового окна:
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");
}
}
person
DavidPostill
schedule
04.08.2014
+1, но
setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4);
лучше setLocationRelativeTo(parent)
.
- person Andrew Thompson; 04.08.2014
Спасибо за ваши ответы. Нет способа сделать это с помощью Jframes ??
- person user3862042; 04.08.2014