当前位置:  技术问答>java相关

问一个关于对话框的问题

    来源: 互联网  发布时间:2014-12-26

    本文导语:  在浏览器中弹出一个对话框后,鼠标点击页面,对话框就跑到浏览器后面去了. 如何解决这个问题,而且只能用AWT中的方法,请大虾指教,据高手说是因为 在浏览器中无法获得frame句柄,但是我想一定有解决的方法的,请大家讨...

在浏览器中弹出一个对话框后,鼠标点击页面,对话框就跑到浏览器后面去了.
如何解决这个问题,而且只能用AWT中的方法,请大虾指教,据高手说是因为
在浏览器中无法获得frame句柄,但是我想一定有解决的方法的,请大家讨论!!!

|
In order to display a Dialog, you need a Frame to be the "owner" of the dialog - all of the java.awt.Dialog constructors require a Frame. Now, I've seen several "teach yourself java" books that say you should make a dummy Frame, and then pass that in as the parent - but that's plain silly. 
What you need to do is walk up the AWT widget instance heirarchy (walking upward from the applet) - at the top of such heirarchies you'll find a Window, a Dialog or a Frame (the three "toplevel" widgets in AWT) - thoughtfully the applet host code will always set itself up as a Frame, just so you can use that as a parent for your dialogs. This walkup procedure is shown in the following example - it's done in the findParentFrame() method. 


 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.Applet; 

public class test extends Applet implements ActionListener { 
  Button b; 

  private Frame findParentFrame(){ 
    Container c = this; 
    while(c != null){ 
      if (c instanceof Frame) 
        return (Frame)c; 

      c = c.getParent(); 
    } 
    return (Frame)null; 
  } 

  public void init(){ 
    setLayout(new FlowLayout()); 
    b = new Button("push me"); 
    b.addActionListener(this); 
    add(b); 
  } 

  public void actionPerformed(ActionEvent e){ 
    Frame f = findParentFrame(); 
    if(f != null){ 
      Dialog d = new Dialog(f, "modalDialog", true); 
      d.setLayout(new FlowLayout()); 
      d.add(new Label("hello")); 
      d.pack(); 
      d.setLocation(100,100); 
      d.show(); 
    } 
  } 


So that's that, right?

Well, not entirely. As with many aspects of their implementation of Java applets, browsers differ in how they interpret the meaning of "modal". Almost all make the dialog modal with respect to the applet that created it, but some make it fully modal (i.e. the entire browser is waiting on the modal dialog) and others allow other browser windows or even the same browser window (perhaps with other Java applets in it) to continue to run. This seems to happen more because of the way browser vendors implement the event handling loops in their products than by deliberate design (one major browser manufacturer we could name varies in this regard between the same browser on different OSes). Short of scary JavaScript/LiveConnect/JNI nastiness, you'll have to live with your browser manufacturer's conception of how to implement modal. 

For browser manufacturers, ignoring modal behaviour for applets is often a wise choice - otherwise, malicious or defective applets (um, like my example above) can bring up a modal dialog with no means of it being closed, and thus leave the entire browser unusable - forcing the user to kill the browser to recover. 

Another small note about modal dialogs - if you intend your applet to work on Personal Java platforms (things like cable-boxes and webphones) you should assume that only modal dialogs are permitted - Personal Java allows the browser to throw an exception if the browser doesn't support non-modal dialogs. 

    
 
 

您可能感兴趣的文章:

  • 用applet实现打印,除了弹出系统自带的打印对话框,在自其前后各弹出一个”小应用程序需打印,要继续吗?“的对话框,如何去掉这两个对话
  • 在一个panel里弹出一个对话框后,在这个对话框中怎么调用该panel的某些方法?
  • 怎样用main()直接解译一个对话框?因为对话框的构造函数要一个激活他哪个窗体的参数
  • **** 高分, 请问在Java中如何做一个文件选择对话框和目录选择对话框? ***
  • MFC创建模态对话框和非模态对话框的方法
  • 关于对话框的问题,请高手指点
  • 漂亮的jQuery对话框插件 Apprise
  • jQuery弹出对话框 jmodal
  • jQuery对话框插件 jBox
  • jQuery模式对话框 mopBox
  • JavaScript对话框 jsdialog
  • 如何使Applet弹出模态对话框?
  • CDK 风格对话框 cdialog
  • jQuery模式对话框 nyroModal
  • jQuery对话框插件 SimpleModal
  • jQuery对话框插件 SimpleModal iis7站长之家
  • jQuery 对话框插件 Zebra_Dialog
  • jQuery 对话框插件 Dialog jQuery Plugin
  • jQuery对话框插件 boxy
  • JS对话框组件 artDialog
  • mozilla出问题了,打开却弹出错误对话框
  • 关于对话框的菜鸟问题
  • 新手问题之二:怎样关闭对话框(JDIALOG)?不是通过工具栏上的X按钮!
  • 我按书上的例子写了一个大开文件对话框,发现有一个问题
  • 一个简单的问题:启动一个对话框,如何让焦点出现在其中的JTextField上(无内容)
  • 浏览器中模式对话框问题
  • GUI问题:如何使用文件选择对话框保存文本文件,图像文件??
  • 请问大家一个低级的问题:在windows里显示对话框的函数是AfxMessageBox("OK"),在纯java里怎么用,还要引用什么包吗?
  • 弹出对话框的问题?
  • Android修改源码解决Alertdialog触摸对话框边缘消失的问题
  • 关于jbuilder的问题:如何连接菜单事件,如何通过按钮显示别的窗体,如何显示对话框
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问在Applet里面怎样弹出一个对话框
  • JavaScript 对话框 vex
  • jQuery的对话框插件 eziConfirm
  • jQuery对话框插件 akModal
  • jQuery模态对话框 jModel
  • JS对话框 Bootbox.js
  • 请教:请问怎么在Applet中怎么弹出一个对话框?
  • java打印对话框
  • 如何关闭IE弹出讨厌的“文件下载对话框”
  • 怎样做一个文件对话框?
  • CGI里如何创建弹出对话框
  • jQuery对话框 jQuery Modal Dialog
  • 我想在对话框的初始化时关闭它,怎么实现?
  • jQuery在iframe中无法弹出对话框的解决方法
  • jQuery对话框插件 jquery.modalbox
  • 网页弹出式对话框 Lightbox JS
  • android开发教程之时间对话框核心代码
  • 有种做类似向导的对话框,如何做??
  • 如何设置选择对话框(JOptionPane)中文本的字体?
  • 紧急求救,关于高用"打印"对话框的程序代码?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3