代码之家  ›  专栏  ›  技术社区  ›  Terje Dahl

JFrame消失在applet的浏览器窗口后面

  •  0
  • Terje Dahl  · 技术社区  · 16 年前

    frame.toFront(); 这个很好用。

    但最初(在applet的 public void init() {} frame.setVisible(true); 我打电话来 frame.toFront(); 确保从前面开始。但是,框架会立即放在浏览器后面。不过,按一下按钮就会把它叫回来。 我试过运行一个单独的线程,它反复调用 frame.toFront(); 但一旦停止,框架就在浏览器后面。只有按下按钮,它才会走到前面,并保持在前面。另外,让一个循环或时间持续地把它放在前面并不是一个好的选择,因为用户可能需要或希望它故意放在后面。 这个“bug”并不存在于Mac(运行Java1.5)上,而是存在于Windows(运行1.6)上——包括IE、FF、Chrome、Safari,但不存在于Opera(奇怪的是)。

    可能的原因和解决方法?

    2 回复  |  直到 16 年前
        1
  •  0
  •   jarnbjo    16 年前

    你在镜框上试过setAlwaysOnTop(正确)吗?但是,我不确定从applet创建的框架或窗口是否允许这样做。

        2
  •  0
  •   Terje Dahl    16 年前

    这个 setAlwaysOnTop(true) 解决了一个问题,但创建了另一个问题,即现在用户无法真正将窗口发送到后面。

    在连接到JFrame的WindowListener中,放置以下代码:

    @Override
    public void windowDeactivated(WindowEvent e)
    {
      if(firstToBack)  //firstToBack is an bloolean instance variable initialized to true
      {
        final JFrame f = frame;
        new Thread() { public void run() {
          try { Thread.sleep(300); } catch(InterruptedException ie) {}  
          f.toFront();
        }}.start();
        firstToBack = false;
      } 
    }
    

    也许有人能告诉我为什么这样做,但是当从applet的init()方法启动相同类型的线程时,在线程结束后,窗口还是转到了后面?