Java – 显示最小化的JFrame窗口
如果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)); }
如果您想从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);
这里的例子。
每当状态发生变化时都会触发WindowEvent
,以及处理这些触发器的WindowListener
接口。在这种情况下,您可以使用:
public class YourClass implements WindowListener { ... public void windowDeiconified(WindowEvent e) { // Do something when the window is restored } }
如果您想要检查另一个程序的状态更改,则不存在“纯Java”解决方案,而只需要获取窗口的ID
。
您可以将状态设置为正常:
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(); } }