为了账号安全,请及时绑定邮箱和手机立即绑定

当 Java 不在顶部时,JDialog 不专注于 OSX

当 Java 不在顶部时,JDialog 不专注于 OSX

蝴蝶刀刀 2024-01-28 20:27:40
当 Java 程序不在 OSX 中的前面时,我的 JDialog 不聚焦。我该如何实现这一目标?我有以下测试程序来说明场景(在底部),javac Test.java && java Test从终端运行。当终端输出“Started first”时,会将焦点转移到Java程序上。我通过单击终端(或其他程序)从启动的 Java 程序中移除焦点。显示有“第二个测试”文本的第二个 JDialog 将不会获得焦点。即使我设置了也是一样dialog.setAlwaysOnTop(true);当我在看到“首先启动”后将 Java 程序保留在顶部时,带有“第二个测试”文本的 JDialog 正确聚焦(即不单击其他位置以便启动的 Java 程序位于顶部)。请注意,我的 Java 程序没有 Swing UI。它在后台运行并弹出 JDialog 来接受用户输入。这在 Windows 和 Linux 上都可以正常工作(无论当时哪个应用程序处于焦点状态,创建的 JDialog 都会获得焦点)。public class Test {    public static void main(String[] args) throws Exception {        Thread t = new Thread() {            @Override            public void run() {                SwingUtilities.invokeLater(new Runnable() {                    public void run() {                        launch("First test");                    }                });            }        };        Thread t2 = new Thread() {            @Override            public void run() {                SwingUtilities.invokeLater(new Runnable() {                    public void run() {                        launch("Second test");                    }                });            }        };        t.start();        System.out.println("Started first");        Thread.sleep(5000);        System.out.println("Started second");        t2.start();    }    private static void launch(String title) {        System.out.println("Showing");        System.out.println(Thread.currentThread().getName());        final JDialog dialog = new JDialog(null, "Test", ModalityType.APPLICATION_MODAL);        dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);        dialog.setVisible(true);        System.out.println("Result is " + searchBar.getText());    }}
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

基本上这个想法是使用 java.awt.Robot 移动鼠标并单击弹出对话框以获得焦点。

它在大多数情况下都有效,但是当您有多个屏幕时,鼠标移动很奇怪,因此需要特殊情况处理。


查看完整回答
反对 回复 2024-01-28
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信