【问题标题】:Java - Show a minimized JFrame windowJava - 显示最小化的 JFrame 窗口
【发布时间】:2011-12-13 12:08:14
【问题描述】:

如果一个 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));
            }

【问题讨论】:

  • 你的 jframe 窗口是父窗口还是子窗口?
  • 也可以。如果需要是其中一个,我可以更改它。
  • 我无法理解您要做什么。
  • 抱歉,我很难解释清楚。我在任务栏上有一个最小化的窗口,它是一个 JFrame 窗口。我试图展示它。 (如果您单击任务栏上的最小化窗口,无论它被称为什么,它都会将其调出)。
  • 1) 在 GUI 中调用 Thread.sleep(n) 很危险。改为设置基于Timer 的一次性Swing。 2) 为了尽快获得更好的帮助,请发帖SSCCE

标签: java swing jframe focus


【解决方案1】:

如果您想将其从 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 接口可以处理这些触发器。在这种情况下,您可以使用:

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

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

【讨论】:

  • 我只是为了测试而尝试过,它确实有效。但是当我将它实现到我的实际程序中时,它就不起作用了。
  • 如果您在问题中发布代码,我们可以对其进行修改以使其正常工作。
【解决方案2】:

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

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();
    }

}

【讨论】:

  • @AndrewThompson:很好的建议,我添加了它们和一个用于最小化的按钮。
猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多