我有一个 JDialog,每当我的主应用程序收到事件时就会弹出。我面临的问题是即使主窗口最小化也会弹出对话框。此处提出了类似的问题,但没有给出有关如何解决此问题的答案,除了指向 sun 的焦点处理指南的链接Hide JDialog window when the window lost focus。
假设我有函数 createandshowDialog() 例如
public void createAndShowDialog(boolean manualLaunch) {
if (manualLaunch || shouldShowMessage()) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (dialog == null) {
dialog = new xyzDialog(getPendingList());
}
GUIHelper.flash(PLAFHelper.getMainFrame(), true, false);
dialog.setVisible(true);
}
});
}
}
xyzDialog 类定义为:
public class xyzDialog extends SimpleStandardDialog
{
protected final static Log logger = LogFactory.getLog(xyzDialog.class);
private xyzPanel panel;
public xyzDialog(ObjectArrayList list) {
super(PLAFHelper.getMainFrame(), "Pending Cancel/Replace");
initializeLocalVars();
panel = new xyzPanel(list, mediator);
super.setSize(750,600);
setResizable(true);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setModal(false);//todo: for testing...
if(PUMAGUIOptions.cFocusOnxyzPopup){
setFocusableWindowState(true);
validate();
}
else{
setFocusableWindowState(false);
validate();
}
}
默认行为应该是这样的,如果主窗口被最小化,或者我们明确地将 cFocusOnxyzPopup 设置为 false 以强制执行此默认行为(当它在辅助监视器上打开并且我们正在使用主监视器或应用程序时,就是这种情况)最大化或在后台,即不是focusOwner。
我已将focusableWindowState设置为false,这样它就不会满足获得焦点的条件,如果按照java-docs中给出的方式调用,则返回isFocusable为false。但这不起作用。任何建议?