2016-07-28 79 views
1

我有一个程序在CLI中运行,但使用JOptionPane来显示一个弹出菜单来提醒用户一个事件。我注意到,当调用showMessageDialog方法时,生成的弹出式菜单不会自动聚焦。在控制台程序中的JOptionPane showMessageDialog请求焦点

有没有一种方法可以请求弹出对话框的焦点?我曾尝试在JOptionPane上调用requestFocus,但无济于事。

这是一些示例代码。

System.out.println("Backing up..."); 
//backUp(); 
Component frame = null; 
JOptionPane jop = new JOptionPane(); 
jop.showMessageDialog(frame, "Backup complete. Ready for encryption."); 

我很抱歉,如果这是转发,但我一直未能找到工作答案。

+0

我只是想你的代码,它会自动得到焦点!要测试,只需点击“Enter”,看看弹出窗口是否消失。 – mohsenmadi

+0

@mohsenmadi如果我在另一个窗口中,则不会这样做,这是问题所在。通常我可以通过调用requestFocus()来解决这个问题,但是我似乎无法做到这一点,因为showMessageDialog是静态的,调用'jop.requestFocus()'不会生效,因为showMessageDialog暂停线。 – Sollybird

+0

仍然无法重现!我刚试过'尝试{Thread.sleep(2000); JOptionPane.showMessageDialog(null,“Back ...”);} catch(InterruptedException e){}'给予时间专注于其他窗口。结果?当弹出窗口显示时仍然有焦点!我在Mac上运行 - 也许不同的系统给出不同的行为? – mohsenmadi

回答

0

创建一个JDialog并致电setAlwaysOnTop通过true

JOptionPane jop = new JOptionPane(); 
JDialog dlog = jop.createDialog(null, "Backup complete. Ready for encryption."); 
dlog.setAlwaysOnTop(true);//make JDialog on top of other windows 
dlog.setVisible(true); 

Windows上述工作,但要注意,这种行为可能是与平台相关的(见文档 - 你可以检查,如果这是通过isAlwaysOnTopSupported方法支持)