java - 当 Java 不在顶部时,JDialog 不专注于 OSX
问题描述
当 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);
final JTextField searchBar = new JTextField(title);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(searchBar);
dialog.add(panel);
dialog.pack();
dialog.setLocationRelativeTo(null);
searchBar.requestFocus();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
searchBar.requestFocus();
}
});
dialog.setVisible(true);
System.out.println("Result is " + searchBar.getText());
}
}
解决方案
推荐阅读
- python - 将带有空格分隔的列表压缩成元组
- shell - Erlang shell输出信息中的$是什么意思
- html - 在我的网络应用程序中,MacOS 搞乱了我的格式,而 Windows 处理得很好
- c# - 从 Windows 应用程序中的表中提取数据
- python - python re正则表达式冻结对随机文本的处理
- visual-studio-code - 如何设置 CodeLLDB 以调试从 Java 进程调用的 Rust 可执行文件?
- excel - 下载保存在烧瓶服务器上的 excel 文件
- tsql - T-SQL 使用 Lead () 函数,但不允许在 GROUP BY 或 UPDATE 中使用
- html - 为什么我的 CSS 动画在除 Safari 之外的所有浏览器中都有效?
- javascript - 比较两个对象数组并在 Javascript 中值为 true 时返回一个新数组