如何以编程方式获取JOptionPane消息内容

时间:2016-07-13 06:12:51

标签: java swing swingutilities

我的应用程序与第三方独立应用程序集成,它将在单独的线程中打开JOptionPane对话框,我正在运行该线程以关闭所有打开的对话框。所以在关闭之前我需要在对话框上写入消息。< / p>

我想要实现的示例主程序:

   public static void main(String[] args)throws Exception{
    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
    executor.scheduleAtFixedRate(() -> {
        Window[] possibleWindow = Window.getWindows();
        if (possibleWindow != null && possibleWindow.length > 0) {
            System.out.println("Found " + possibleWindow.length + "Window(s) " + possibleWindow[0].getClass().getSuperclass());
            for (int i = possibleWindow.length - 1; i >= 0; i--) {
                try {
                    Window window = possibleWindow[i];
                    //here where I need to get the dialog box message before closing it.
                    window.dispose();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }, 1, 1, TimeUnit.SECONDS);

    JOptionPane.showMessageDialog(null, "test !!!!");
}

3 个答案:

答案 0 :(得分:1)

如果我正确地提出了你的问题,你就会创建JOptionPane对象并给它们一个消息;以后,你想知道你给他们的信息吗?

如果是这样,一个简单的解决方案就是创建一个中心地图,如Map<JOptionPane, String>。每次创建新的JOptionPane时,都会记住它(及其消息);清理后;您只需获取那些仍在运行的JOptionPane对象的消息。

答案 1 :(得分:0)

你需要递归地窗口的所有组件。 此解决方案适用于您的情况:

public static String getMess(Container w){              
    for (Component component : w.getComponents()) {
        if (component instanceof JLabel) {
            return ((JLabel) component).getText();
        }
        else if (component instanceof JTextField){
            return ((JTextField) component).getText();
        }
        else if (component instanceof Container){
            String s = getMess((Container) component);
            if (!s.isEmpty()){
                return s;
            }
        }
    }
    return "";
}

答案 2 :(得分:0)

这个解决方案对我有用:

   if (window instanceof JDialog) {
        System.out.println("text : " + ((JOptionPane)((JDialog) window).getContentPane().getComponents()[0]).getMessage());
    }