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