JOptionPane или лучшее решение - PullRequest
       9

JOptionPane или лучшее решение

2 голосов
/ 20 сентября 2011

Я бы спросил кое-что о моем проекте.У меня есть Java-программа, которая подключается к веб-сайту через класс Connection, который принимает в качестве параметра int.В этом классе есть только метод, который возвращает ArrayList (он получает информацию с веб-страницы и помещает результаты в массив).

В Main у меня есть цикл for:

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

Внутри этого цикла я вызываю объект Connection, который получает в качестве параметра «i» цикла, и когда объект возвращает ArrayList, я беру его, что-то с ним делаю и показываю результат внутри JOptionPane.

проблема в том, что ТОЛЬКО когда я нажимаю на ОК, я вижу другую панель JOptionPane с результатом операции, выполненной в цикле.Я хочу видеть их одновременно, чтобы я мог видеть все данные.

Из Javadoc

Все диалоги являются модальными.Каждый метод showXxxDialog блокирует вызывающего до тех пор, пока взаимодействие с пользователем не будет завершено.

Итак, как я могу решить проблему?

1) Является ли использование многопоточности хорошим решением или есть лучшие?

2) есть ли способ автоматически обновлять данные JoptionPane без запуска программы?

Спасибо и извините за мой плохой английский.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

есть ли способ, которым я могу автоматически обновлять данные JoptionPane без запуска программы?

Конечно.Покажите JPanel в нем, который использует CardLayout, как показано здесь .

image image

2 голосов
/ 20 сентября 2011

Что касается первой части вопроса:

, вы не можете показать несколько JDialog, если используете метод showXXXDialog, потому что они модальные.С другой стороны, если вы создаете объект 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 где-либо еще внутри вашей программы, ваш диалог будет автоматически обновлен.

...