Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击即可复制子帧_Java_Swing_Jframe_Multiple Instances - Fatal编程技术网

Java 单击即可复制子帧

Java 单击即可复制子帧,java,swing,jframe,multiple-instances,Java,Swing,Jframe,Multiple Instances,我有一个窗口,它是我应用程序中的主窗口,其中包含按钮。单击其中一个时,会出现一个子JFrame,如果我再次单击,会出现另一个帧,这可能是连续的,具体取决于单击的次数。我想要的是,当我单击JButton一次时,应该只打开一个帧,并且由于此帧是打开的,因此在第二次单击按钮时,无法打开其他类似帧,直到第一个子帧关闭 这可以通过打开一个模式对话框来完成,而不是打开一个jFrame。有关更多信息,请参阅 以下是一个简单的例子: 参见+1,但设置位置(p.x+parentSize.width/4,p.y+p

我有一个窗口,它是我应用程序中的主窗口,其中包含按钮。单击其中一个时,会出现一个子
JFrame
,如果我再次单击,会出现另一个帧,这可能是连续的,具体取决于单击的次数。我想要的是,当我单击
JButton
一次时,应该只打开一个帧,并且由于此帧是打开的,因此在第二次单击按钮时,无法打开其他类似帧,直到第一个子帧关闭

这可以通过打开一个模式对话框来完成,而不是打开一个
jFrame
。有关更多信息,请参阅

以下是一个简单的例子:


参见+1,但
设置位置(p.x+parentSize.width/4,p.y+parentSize.height/4)
最好是
setLocationRelativeTo(家长)
。感谢您的回答。使用Jframes做不到这一点??
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");
  }
}