JavaFX - 从通知弹出窗口中检索对象

Posted

技术标签:

【中文标题】JavaFX - 从通知弹出窗口中检索对象【英文标题】:JavaFX - Retrieve objects from notification popups 【发布时间】:2018-10-15 15:17:16 【问题描述】:

我正在开发的 JavaFX 应用程序遇到问题,这是检索用于创建通知弹出窗口的数据的方法。 情况是这样的:我每隔 x 秒就有一个针对 Web 服务的线程循环调用,这将返回我需要的数据(其中,我使用它来创建通知)。 这是部分代码:

        if(alert.isNotificationAlertEnabled()) 

        Platform.runLater(new Runnable() 

            @Override
            public void run() 

                for(int i=0; i<result.length(); i++) 

                    System.out.println(".run()");

                    try 

                        Notifications notificationBuilder = Notifications.create()
                                                                         .title(((JSONObject) result.get(i)).get("number").toString())
                                                                         .hideAfter(Duration.seconds(Alert.NOTIFICATION_DURATION))
                                                                         .position(Pos.BASELINE_RIGHT)
                                                                         .text(((JSONObject) result.get(i)).get("short_description").toString())
                                                                         .darkStyle();

                        notificationBuilder.onAction(e -> 

                            // HOW TO RETRIEVE <result[i]> HERE?

                        );
                        notificationBuilder.show();

                     catch(Exception e)  e.printStackTrace(); 

                
            
        );
    

有一种方法可以将数据绑定到单个通知,以便在 onAction() 方法中使用它们? 感谢您的宝贵时间。

【问题讨论】:

我可能并不真正理解你想要做什么,但你不能做类似JSONObject jsonObject = (JSONObject) result.get(i)).get("number").toString(); 然后Notifications notificationBuilder =.....notificationBuilder.onAction(e -&gt; // HOW TO RETRIEVE &lt;result[i]&gt; HERE? System.out.println(jsonObject.toString()); ); notificationBuilder.show(); 之类的事情 您是否遇到了最终或实际上最终的问题? 是的,这就是我问的原因(首先我已经尝试过你的方法) 您是否尝试过将JSONObject jsonObject 设为全局。 【参考方案1】:

也许我不明白你的问题,但在我看来你可以做到

 if(alert.isNotificationAlertEnabled()) 

    Platform.runLater(new Runnable() 

        @Override
        public void run() 

            for(int i=0; i<result.length(); i++) 

                System.out.println(".run()");

                try 

                    Notifications notificationBuilder = Notifications.create()
                                                                     .title(((JSONObject) result.get(i)).get("number").toString())
                                                                     .hideAfter(Duration.seconds(Alert.NOTIFICATION_DURATION))
                                                                     .position(Pos.BASELINE_RIGHT)
                                                                     .text(((JSONObject) result.get(i)).get("short_description").toString())
                                                                     .darkStyle();

                    notificationBuilder.onAction(e -> 

                        // HOW TO RETRIEVE <result[i]> HERE?
                        System.out.println(((JSONObject) result.get(i)).toString());
                    );
                    notificationBuilder.show();

                 catch(Exception e)  e.printStackTrace(); 

            
        
    );

if(alert.isNotificationAlertEnabled()) 

    Platform.runLater(new Runnable() 

        @Override
        public void run() 

            for(int i=0; i<result.length(); i++) 

                System.out.println(".run()");

                try 
                    JSONObject jsonObject = (JSONObject) result.get(i);
                    Notifications notificationBuilder = Notifications.create()
                                                                     .title(jsonObject.get("number").toString())
                                                                     .hideAfter(Duration.seconds(Alert.NOTIFICATION_DURATION))
                                                                     .position(Pos.BASELINE_RIGHT)
                                                                     .text(jsonObject.get("short_description").toString())
                                                                     .darkStyle();

                    notificationBuilder.onAction(e -> 

                        // HOW TO RETRIEVE <result[i]> HERE?
                        System.out.println(jsonObject.toString());
                    );
                    notificationBuilder.show();

                 catch(Exception e)  e.printStackTrace(); 

            
        
    );

【讨论】:

以上是关于JavaFX - 从通知弹出窗口中检索对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在javafx中创建一个弹出窗口[重复]

如何设置一个按钮以显示弹出窗口的不同结果? (JavaFX)

不使用 JxBrowser 插件在弹出窗口中查看 pdf 的 JavaFx

显示从 parse.com 获取的解析通知作为弹出窗口

如果应用程序终止后从通知正文启动应用程序,则打开弹出窗口

通知弹出窗口不适用于单个实例