【问题标题】:.requestFocusInWindow() doesn't work when build the jar.requestFocusInWindow() 在构建 jar 时不起作用
【发布时间】:2016-09-02 20:17:19
【问题描述】:

我有一个 GUI Java 应用程序。该应用程序最小化到系统托盘。我在托盘图标被点击的时候放了一个frame.requestFocusInWindow(),这样恢复的JFrame可以引起用户的注意。

代码如下。

 trayicon.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            try {
                if (e.getButton()==MouseEvent.BUTTON1) frame.setVisible(true);
                frame.requestFocusInWindow();
            } catch (Exception ex) {
                Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex);
            }
        } 
});

如果我在 NetBeans IDE 中执行应用程序,这可以完美运行,但是当我构建 .jar 文件并执行它时,.requestFocusInWindow() 似乎不起作用,因为应用程序窗口没有引起用户注意并且是在我打开的其他窗户后面恢复。那么这里发生了什么?

【问题讨论】:

  • 您可以尝试将 requestFocusInWindow 方法包装在 SwingUtilities.invokeLater(...) 中。或者,可以尝试对已添加到框架的组件使用 grabFocus() 方法。
  • 谢谢!但是不起作用,JFrame 不会显示在其他窗口前。我认为问题不在于焦点,而在于窗口状态。单击最小化按钮时,JFrame 从屏幕隐藏到系统托盘图标,也许问题是当单击托盘图标时,JFrame 显示为frame.setVisible(true) 但仍然最小化...可以?

标签: java swing focus executable-jar


【解决方案1】:

问题解决了。我在MouseListener 中使用了JFrame.setExtendedState() 方法如下:

trayicon.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        try {
            frame.setExtendedState(JFrame.NORMAL);
            frame.setVisible(true);
        } catch (Exception ex) {
            Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 2012-11-21
    • 1970-01-01
    • 2020-09-15
    • 2019-07-03
    • 2017-05-28
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多