Java:JOptionPane 影响父 JFrame? (包括SSCCE)

标签 java swing applet

给定以下小程序:

import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Example extends JApplet
{
   JPanel aPanel;

   @Override
   public void init()
   {
      try
      {
         javax.swing.SwingUtilities.invokeAndWait(new Runnable()
         {
            public void run()
            {
               makeGui();
            }
         });
      }
      catch (InterruptedException e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      catch (InvocationTargetException e)
      {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }      
   }

   public void makeGui()
   {
      aPanel = new JPanel(new BorderLayout());

      this.getContentPane().add(aPanel, BorderLayout.CENTER);

      JFrame aTestFrame =new JFrame();
      aTestFrame.setBounds(new Rectangle(200,200));
      JPanel aTestPanel = new JPanel(new BorderLayout());
      aTestPanel.setBounds(new Rectangle(200,200));

      aTestFrame.add(aTestPanel);
      aTestFrame.setVisible(true);
      JOptionPane.showMessageDialog(aTestFrame, "arfarf");


   }

}

为什么 JOptionPane 调用会关闭 aTestFrame?如果我省略调用,则 2 个帧会正确呈现,但是当我在 JOptionPane 中单击“确定”时,父 JFrame 将关闭。

第一个答案是正确的,显然存在焦点问题..谢谢!

最佳答案

我认为最好不要将 JFrame 与 JApplet 一起使用,而应使用绑定(bind)到 JApplet 的 Window 祖先的 JDialog:

   public void makeGui() {
      aPanel = new JPanel(new BorderLayout());

      this.getContentPane().add(aPanel, BorderLayout.CENTER);

      Window win = SwingUtilities.getWindowAncestor(Example.this);

      JDialog dialog = new JDialog(win, "My Dialog", ModalityType.MODELESS);

      JPanel dialogPanel = new JPanel();
      dialogPanel.setPreferredSize(new Dimension(200, 200));
      dialog.add(dialogPanel);
      dialog.pack();
      dialog.setVisible(true);

      JOptionPane.showMessageDialog(dialog, "arfarf");
   }

关于Java:JOptionPane 影响父 JFrame? (包括SSCCE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849514/

相关文章:

java - 某种外观和感觉是否保证可用?

java - Java applet使用智能卡实现数字签名

java - 联赛表 - SQL 查询/JDBC 问题

来自 Web 服务的相同字符串的 Java md5 哈希对于每个事务都是不同的

java - 将常用方法的返回类型修改为其子类型

java - Android Java 对象列表与图像

java - JOptionPane.showConfirmDialog 阻止后台窗口

java - 龟兔赛跑小程序,如何才能让我的代码正常工作?

java - 在小程序中显示图像并播放音频片段

java - 将信息传递给 Java Web Start?