【问题标题】:JOptionPane or better solutionJOptionPane 或更好的解决方案
【发布时间】:2011-11-21 06:02:35
【问题描述】:

我会问一些关于我的项目的问题。 我有一个 Java 程序,它通过一个以 int 为参数的 Connection 类连接到一个网站。该类只有一个返回 ArrayList 的方法(它从网页中获取信息,并将结果放入 arraylist)。

在 Main 我有一个 for 循环:

for(int i=0;i<insertUserNumber; i++){} 

在这个循环中,我调用一个 Connection 对象,该对象将循环的“i”作为参数,当该对象返回 ArrayList 时,我接受它,用它做一些事情并在 JOptionPane 中显示结果。

问题是,只有当我单击“确定”时,我才会看到另一个 JOptionPane 的操作结果在循环中执行。我希望同时查看它们,以便查看所有数据。

来自 Javadoc

所有对话框都是模态的。每个 showXxxDialog 方法都会阻塞调用者,直到用户交互完成。

那么我该如何解决这个问题呢?

1)使用多线程是一个好的解决方案还是有更好的解决方案?

2) 有没有一种方法可以在不启动程序的情况下自动刷新 JoptionPane 的数据?

感谢和抱歉我的英语不好。

【问题讨论】:

    标签: java multithreading swing loops joptionpane


    【解决方案1】:

    关于问题的第一部分:

    如果你使用 showXXXDialog 方法,你不能显示多个 JDialog,因为它们是模态的。 另一方面,如果你创建一个 JDialog 对象,你可以尽可能多地显示它:

    JDialog first = new JDialog();
    first.setSize(new Dimension(80,80));
    JDialog second = new JDialog();
    second.setSize(new Dimension(80,80));
    
    first.setVisible(true);
    second.setVisible(true);
    

    对于动态更改对话框内显示的数据,是的,这也是可能的。所有 showXXXDialog 方法的第一个参数是一个框架(因此也可以是一个 JDialog 对象)。您可以执行以下操作:

    JDialog dialog = new JDialog();
    JPanel p = new JPanel ();
    p.setLayout(new FlowLayout());
    JLabel label = new JLabel("FOO");
    p.add(label);
    dialog.add(p);
    
    JOptionPane.showXXXDialog(dialog,....);
    

    如果您在程序中的其他任何地方更改 JLabel 标签的内容,您的对话框将自动更新。

    【讨论】:

    • 这样我就不用点击确定就可以看到另一个“窗口”了吧?
    • 不,你没有。但我不确定你想做的是一件好事。有几个打开的对话框可能会使用户感到困惑。无论如何,如果这就是您想要的,我认为您可以尝试使用此解决方案。
    • 问题是当用户想要比较数据时。如果不显示几个打开的对话框,我怎么能做到这一点?我希望两个数据都只显示 1,但我不知道怎么做。顺便说一下,如果你想提出一些建议,我会很高兴。谢谢
    【解决方案2】:

    有没有一种方法可以在不启动程序的情况下自动刷新 JoptionPane 的数据?

    当然。在其中显示一个使用CardLayoutJPanel,如here 所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多