У меня есть JDialog, который появляется всякий раз, когда мое основное приложение получает событие.Проблема, с которой я сталкиваюсь, заключается в том, что диалоговое окно всплывает, даже если главное окно свернуто.Подобный вопрос был задан здесь, но не было дано никакого ответа относительно того, как решить эту проблему, кроме ссылки на руководство Sun по обработке фокуса Скрыть окно JDialog, когда окно потеряло фокус .
Предположим, у меня есть функция 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, чтобы он не удовлетворял условию получения фокуса и возврата isFocusable как false, если вызывается как задано в java-документах. Но это не работает. Любые предложения?