【问题标题】:Bringing specific Jdialog to front when having multiple jdialogs in one application在一个应用程序中有多个 jdialog 时将特定的 Jdialog 放在前面
【发布时间】:2013-12-05 06:49:47
【问题描述】:

我的应用程序中有多个 JDialogs 存储在地图中。这些JDialogs都有

setModel(false);

当这些对话框失焦并且我想将一个特定的 JDialog 带到 Front 时,所有 JDialog 都会来到 Front。我希望特定的 JDialog 出现在前面,并希望其他 JDialog 留在后面。

     HashMap<String, JDialog> jDialogMap = getJDialogMap();
       String key = "jd1";
       JDialog specificJDialog= jDialogMap.get(key);

        if (specificJDialog== null){
             specificJDialog= new JDialog();
             specificJDialog.setModel(false);
             specificJDialog.setVisible(true);
             jDialogMap.put("jd2", specificJDialog);
        } else {
             specificJDialog.toFront();
             return;
       }

此代码将所有 JDialogs 带到堆栈顶部,并将特定 JDialog 置于堆栈顶部。

getJDialogMap();

这个方法只返回一个 HashMap 没有别的。

【问题讨论】:

    标签: java swing jdialog


    【解决方案1】:

    使用 requiredDialogObject.requestFocusInWindow();

    当你需要专注于特定的对话框时

    【讨论】:

      【解决方案2】:

      我找到了解决问题的方法,我认为值得分享。

      解决方案:在应用程序中使用默认构造函数创建多个 JDilog,即 new JDialog() 将导致共享框架作为每个 JDialog 的父级,这将导致此类问题。所以我使用重载的构造函数 new JDialog(new JFrame()) 为每个 JDialog 设置单独的父级,这解决了我的问题。

      【讨论】:

      • 哇,这拯救了我的一天。我有两个模态对话框,错误的对话框在前面。 toFront() 没有帮助,requestFocusInWindow 没有帮助 - 有一个不同的(甚至是假的)父母就可以了!
      【解决方案3】:

      有类似的问题。打开 JDialog 后,我的主应用程序窗口再次请求焦点,将 JDialog 窗口移动到背景,这很烦人。我尝试了 modal() 和 toFront() 方法,这两种方法都不适合我,因为 modal() 只是完全阻止了用户交互(在那个 JDialog 之外),而 toFront() 也对我的应用程序之外的窗口有影响(通过在计时器方法中使用它,见下文)。

      为了将窗口保持在主应用程序的前面,我使用了一个计时器方法,该方法每 300 毫秒触发一次,并通过使用 requestFocus() 方法不断请求焦点。

      import javax.swing.Timer;
      Timer timer = new Timer(300, new ActionListener() {
          
          @Override
          public void actionPerformed(ActionEvent e) {
              requestFocus();
          }
      });
      timer.start();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        • 2023-03-21
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多