2011-12-13 69 views
6

如果JFrame窗口最小化,有什么方法可以使其重新聚焦?Java - 显示最小化的JFrame窗口

我想让它点击某个点,然后恢复它。

  while (isRunning) { 
       start = System.currentTimeMillis(); 
       frame.setState(Frame.ICONIFIED); 
       robot.mouseMove(clickX, clickY); 
       robot.mousePress(InputEvent.BUTTON1_MASK); 
       frame.setState(Frame.NORMAL); 
       Thread.sleep(clickMs - (System.currentTimeMillis() - start)); 
      } 
+0

你的jframe窗口是父母还是孩子? – Pritom

+0

它可能是。如果它需要是一个或另一个,我可以改变它。 – Stripies

+0

我无法理解你正在尝试做什么。 – Pritom

回答

12

如果你想从iconified把它带回来,你可以设置其状态normal

JFrame frame = new JFrame(...); 
// Show the frame 
frame.setVisible(true); 

// Sleep for 5 seconds, then minimize 
Thread.sleep(5000); 
frame.setState(java.awt.Frame.ICONIFIED); 

// Sleep for 5 seconds, then restore 
Thread.sleep(5000); 
frame.setState(java.awt.Frame.NORMAL); 

来自here的示例。

也有WindowEvents每当状态改变时触发和WindowListener接口处理这些triggers.In这种情况下,你可以使用:

public class YourClass implements WindowListener { 
    ... 
    public void windowDeiconified(WindowEvent e) { 
    // Do something when the window is restored 
    } 
} 

如果您想查询另一个程序的状态变化,没有“纯Java”解决方案,但只需要获取窗口的ID即可。

+1

我试过,只是为了测试,它的工作。但是当我将它实现到我的实际程序中时,它不起作用。 – Stripies

+0

如果您在问题中发布您的代码,我们可以对其进行修改以使其正常工作。 – Jon

+0

我编辑了主帖。 – Stripies

5

您可以将状态设置为正常:

frame.setState(NORMAL); 

完整的示例:

public class FrameTest extends JFrame { 

    public FrameTest() { 
     final JFrame miniFrame = new JFrame(); 
     final JButton miniButton = new JButton(
      new AbstractAction("Minimize me") { 
      public void actionPerformed(ActionEvent e) { 
       miniFrame.setState(ICONIFIED); 
      } 
     }); 

     miniFrame.add(miniButton); 
     miniFrame.pack(); 
     miniFrame.setVisible(true); 

     add(new JButton(new AbstractAction("Open") { 
      public void actionPerformed(ActionEvent e) { 
       miniFrame.setState(NORMAL); 
       miniFrame.toFront(); 
       miniButton.requestFocusInWindow(); 
      } 
     })); 

     pack(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new FrameTest(); 
    } 

} 
+0

@AndrewThompson:好的建议,我添加了他们和一个按钮,以最小化。 – Jonas

+0

已删除噪音。我会投票,但我之前做过。 :) –