2017-02-03 5 views
-1

Я пишу программу, где я сопоставляю имя с списком. Если я не получаю соответствие, я смотрю имя на SQLite DB, извлекаю информацию о названии в текстовые поля и затем показываю карту (cardlayout). Когда я это запустил, я получил информацию только для последнего несоответствия. Изучая это, я думал, что смогу обойти это, используя SwingWorker. Я взял свое приложение и поместил его в класс SwingWorker и добавил публикацию(), где я хотел отображать информацию. Я получаю тот же результат, пока отображается только последнее несоответствие.Java SwingWorker не работает как ожидалось

Вот фрагменты моего кода:

public class processTeeTimes extends SwingWorker <Integer, String> 
    { 

     @Override 
     protected Integer doInBackground() throws Exception 
     { 
     // Process all tee times foursome at a time 

      String memberGuest;          // Member or guest 
      do              // Process players in foursome 
      { 

       . 
       . 
       . 


        if (!firstOnGHIN()) 
        { 
         System.out.print("No match - first (" + tsTime + "): "); 
         printGolfer();      // Print no match 
         publish(golfer[0]); 

        } 

       . 
       . 
       . 

      } 
      while (!EOF) 


     } 

     @Override 
     protected void process(List<String> golferList) 
     { 
      for (int gIndex = 0; gIndex < golferList.size(); gIndex++) 
      { 
       textFieldRMLast.setText(golferList.get(gIndex)); 
       cards.show(panelCont, ROSTERMAINT); // Show roster maint card 
      } 
     } 

     @Override 
     protected void done() 
     { 
      . 
      . 
      . 

      System.out.println("All done processing Tee Sheet"); 
     } 

Любая помощь будет оценена.

+2

Мы не можем скомпилировать и запустить фрагменты, и нам не нужна вся база кода. Вместо этого я настоятельно призываю вас создать и опубликовать действительный [mcve] - пожалуйста, прочитайте ссылку. –

ответ

4

Получается тот же результат, пока отображается только последнее несоответствие.

Потому что это то, что кажется ваш код будет делать:

@Override 
    protected void process(List<String> golferList) 
    { 
     for (int gIndex = 0; gIndex < golferList.size(); gIndex++) 
     { 
      textFieldRMLast.setText(golferList.get(gIndex)); 
      cards.show(panelCont, ROSTERMAINT); // Show roster maint card 
     } 
    } 

Вы помещаете данные в JTextField, а минутный больше данных встречаются, он немедленно заменяет предыдущий текст с новым текст. Если вы хотите показать несколько строк данных, вам следует использовать компонент, который отображает несколько строк данных, таких как JList или JTable.

Если вам нужна задержка между просмотром данных в JTextField, подумайте о том, чтобы положить Thread.sleep(...) в цикл do-while, который вызывается в методе doInBackground(). Не помещайте в этот цикл выше Thread.sleep, так как приведенный выше код вызывается в потоке событий Swing.

Обратите внимание, что если этот ответ не отвечает на ваш вопрос, то да, вы захотите создать и опубликовать действительный MCVE.

+0

Вот и все. Спасибо. –

Смежные вопросы