Дублирование дочернего JFrame по клику

У меня есть окно, которое является главным окном моего приложения и содержит кнопки. При нажатии на один из них появляется дочерний элемент JFrame, и если я снова нажимаю, появляется другой кадр, и это может быть непрерывным в зависимости от того, сколько кликов сделано. Что я хочу, так это то, что когда я нажимаю на JButton один раз, должен открываться только один кадр, и, поскольку этот кадр открыт, никакие другие подобные кадры не могут быть открыты при нажатии кнопки во второй раз, пока первый дочерний кадр не будет закрыт.


person user3862042    schedule 04.08.2014    source источник
comment


Ответы (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
comment
+1, но setLocation(p.x + parentSize.width / 4, p.y + parentSize.height / 4); лучше setLocationRelativeTo(parent). - person Andrew Thompson; 04.08.2014
comment
Спасибо за ваши ответы. Нет способа сделать это с помощью Jframes ?? - person user3862042; 04.08.2014