當(dāng) Java 程序不在 OSX 中的前面時,我的 JDialog 不聚焦。我該如何實現(xiàn)這一目標(biāo)?我有以下測試程序來說明場景(在底部),javac Test.java && java Test從終端運行。當(dāng)終端輸出“Started first”時,會將焦點轉(zhuǎn)移到Java程序上。我通過單擊終端(或其他程序)從啟動的 Java 程序中移除焦點。顯示有“第二個測試”文本的第二個 JDialog 將不會獲得焦點。即使我設(shè)置了也是一樣dialog.setAlwaysOnTop(true);當(dāng)我在看到“首先啟動”后將 Java 程序保留在頂部時,帶有“第二個測試”文本的 JDialog 正確聚焦(即不單擊其他位置以便啟動的 Java 程序位于頂部)。請注意,我的 Java 程序沒有 Swing UI。它在后臺運行并彈出 JDialog 來接受用戶輸入。這在 Windows 和 Linux 上都可以正常工作(無論當(dāng)時哪個應(yīng)用程序處于焦點狀態(tài),創(chuàng)建的 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貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
基本上這個想法是使用 java.awt.Robot 移動鼠標(biāo)并單擊彈出對話框以獲得焦點。
它在大多數(shù)情況下都有效,但是當(dāng)您有多個屏幕時,鼠標(biāo)移動很奇怪,因此需要特殊情況處理。
添加回答
舉報
0/150
提交
取消