JOptionPane或更好的解决方案

时间:2011-09-20 16:19:04

标签: java multithreading swing loops joptionpane

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

在Main中我有一个for循环:

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

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

问题是,只有当我点击OK时,我才会看到另一个JOptionPane,其结果是在循环中操作。我希望同时看到它们,这样我才能看到所有数据。

来自Javadoc

  

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

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

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

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

谢谢,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:3)

  

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

当然可以。在其中显示使用JPanel的{​​{1}},如here所示。

答案 1 :(得分:2)

问题的第一部分:

如果使用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标签的内容,您的对话框将自动更新。