当前位置: 首页 > 知识库问答 >
问题:

JavaFx当鼠标点击所有者窗口时如何隐藏弹出窗口?

农建弼
2023-03-14

嗨,我有javafx应用程序,它只有一个stage.On标签键按下文本字段的事件,一个弹出窗口显示在应用程序的主要阶段

    private void tripNoKeyPressEventAction(KeyEvent event){
            if(event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.ENTER) {
                popup.show(GateIn.primaryStage);
            }
        }
popup.requestFocus();
        popup.focusedProperty().addListener(new ChangeListener<Boolean>
        () {

            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
               if(t1==false)
               {
                   System.out.println("focus lost");
                   popup.hide();
               }
            }
        });

我不点击弹出窗口,也不选择弹出窗口中的任何内容。我会点击它后面的舞台。我希望popup被关闭,但在执行popup的focusedProperty侦听器之前,它给了我IllegalArgumentException。

如果popup位于不同的阶段(应用程序的主阶段除外),根据阶段focusedProperty(),我可以隐藏popup。如果在主舞台上显示弹出窗口,如何隐藏弹出窗口?

共有2个答案

席成仁
2023-03-14

您应该为大多数顶级窗口设置一个事件调度程序,然后所有事件都将穿过它。

在弹出窗口中:

getScene().getWindow().setEventDispatcher((event, tail) -> {
        if (event.getEventType() == RedirectedEvent.REDIRECTED) {
            //  RedirectedEvent is a box that contains original event from other target
            RedirectedEvent ev = (RedirectedEvent) event;
            if (ev.getOriginalEvent().getEventType() == MouseEvent.MOUSE_PRESSED) {
                hide();
            }
        }else {
            //  if click in the popup window. handle the event by default
            tail.dispatchEvent(event);
        }
        return null;
    });

有关更多信息,请参阅 javafx.event.EventDispatcher

陈野
2023-03-14

使用FX 8,您可以简单地

popup.setAutoHide(true)
 类似资料:
  • 我有以下代码来显示(自定义by-mvn repo) 问题是, > 我希望在鼠标输入时显示弹出窗口-工作正常。 我希望在用户从标签退出鼠标时隐藏弹出窗口,但在弹出窗口中输入鼠标时不隐藏弹出窗口。 我已经在标签上添加了鼠标插入和鼠标退出操作,但如何处理另一种情况,即如果用户输入鼠标进入弹出窗口,我不想隐藏弹出窗口。

  • 我目前有以下的类: 老实说,代码并不重要,请相信我,当用户将鼠标悬停在我的< code>Item对象上时,它会显示一个弹出窗口,如下所示: 这个弹出窗口在我的屏幕中间打开。如果我移动窗口,弹出窗口将在同一位置打开。我需要我的弹出窗口以某种方式在鼠标指针下打开。我知道具有此功能(据称),但我已经致力于设计这个,它具有我的许多设计目标。 这有可能让显示在某个位置吗? 谢谢。

  • 问题内容: 我试图手动关闭引导程序弹出窗口,以在单击或不是弹出窗口的任何位置时将其关闭。 我发现最接近完成此操作的方法是创建一个指令,但这是用于手动触发的,如果变量为_true_ 或 false 。 如果我单击非弹出窗口的任何内容,谁能帮助我找出如何关闭它? 我不介意使用jQuery,但我不知道如何调用关闭。 通常可以解决问题,但是我的弹出窗口包含需要单击的内容。我的弹出式窗口内部有一个_焦点,_

  • 我的标题措辞糟糕,因为我的问题很难描述,所以我为它画了一幅图: 我有一个ImageView对象,它代表一堆卡片(不是扑克牌,只是用它们作为示例)。单击此图像视图时,我需要弹出一个具有滚动窗格的窗口,并向他们显示链接列表中的所有卡片对象。当用户单击窗口之外的任何地方(稍后,单击任何鼠标右键)时,滚动窗格窗口需要关闭。 我已经尝试过的方法: > APPLICATION_MODAL场景。然后是Scene

  • main.java--(src/sample文件夹) studentcontroller.java--(src/sample/controller文件夹) studentdao.java和sexdao.java(数据访问对象)--(src/sample/model文件夹) Student.java(公共类学生和构造器)--(src/sample/model文件夹) oddbc的util下的dbut

  • 我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。