我可以以非模态方式使用Java JOptionPane吗?

2022-09-03 14:50:58

我正在开发一个应用程序,当某个操作发生时,它会弹出一个JOptionPane。我只是想知道当JOptionPane弹出时,你怎么还能使用后台应用程序。目前,当JOptionPane弹出时,在我关闭JOptionPane之前,我无法执行任何其他操作。

编辑

感谢您的回复和信息。认为病态将此功能从应用程序中删除,因为它看起来可能比必要的更麻烦。


答案 1

该文档明确指出,通过 showXXXDialog 方法创建所有对话框时都是模式对话框。

您可以使用从文档中获取的直接使用方法和 JDialog 从 Dialog 继承的 setModal 方法:

 JOptionPane pane = new JOptionPane(arguments);
 // Configure via set methods
 JDialog dialog = pane.createDialog(parentComponent, title);
 // the line below is added to the example from the docs
 dialog.setModal(false); // this says not to block background components
 dialog.show();
 Object selectedValue = pane.getValue();
 if(selectedValue == null)
   return CLOSED_OPTION;
 //If there is not an array of option buttons:
 if(options == null) {
   if(selectedValue instanceof Integer)
      return ((Integer)selectedValue).intValue();
   return CLOSED_OPTION;
 }
 //If there is an array of option buttons:
 for(int counter = 0, maxCounter = options.length;
    counter < maxCounter; counter++) {
    if(options[counter].equals(selectedValue))
    return counter;
 }
 return CLOSED_OPTION;

答案 2

在你的Java应用程序中,我认为你运气不好:我还没有检查,但我认为JOptionPane的showXXXDialog方法会弹出一个所谓的模式对话框,使来自同一JVM的GUI的其余部分保持非活动状态。

但是,Java没有任何抢占前台的超能力:您仍然应该能够将Alt-Tab添加到其他(非Java)应用程序中。


推荐