title: Update JLabel every X seconds from ArrayList<List> - Java
body: <p>I have a simple Java program that reads in a text file, splits it by " " (spaces), displays the first word, waits 2 seconds, displays the next... etc... I would like to do this in Spring or some other GUI. </p>
  
  <p>Any suggestions on how I can easily update the words with spring? Iterate through my list and somehow use setText(); </p>
  
  <p>I am not having any luck. I am using this method to print my words out in the consol and added the JFrame to it... Works great in the consol, but puts out endless jframe. I found most of it online. </p>
  
  <pre><code>    private void printWords() {
          for (int i = 0; i &lt; words.size(); i++) {
              //How many words?
              //System.out.print(words.size());
              //print each word on a new line...
              Word w = words.get(i);
              System.out.println(w.name);
  
              //pause between each word.
              try{
                  Thread.sleep(500);
              } 
              catch(InterruptedException e){
                  e.printStackTrace();
              }
           JFrame frame = new JFrame("Run Text File"); 
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
           JLabel textLabel = new JLabel(w.name,SwingConstants.CENTER);
           textLabel.setPreferredSize(new Dimension(300, 100)); 
           frame.getContentPane().add(textLabel, BorderLayout.CENTER);
          //Display the window. frame.setLocationRelativeTo(null); 
           frame.pack(); 
           frame.setVisible(true);
          }
      }
  </code></pre>
  
  <p>I have a window that get's created with JFrame and JLable, however, I would like to have the static text be dynamic instead of loading a new spring window. I would like it to flash a word, disappear, flash a word disappear. </p>
  
  <p>Any suggestions on how to update the JLabel? Something with repaint()? I am drawing a blank. </p>
  
  <p>Thanks!</p>
  
  <p><strong>UPDATE:</strong> 
  With the help from the kind folks below, I have gotten it to print correctly to the console. Here is my Print Method: </p>
  
  <pre><code>private void printWords() {
              final Timer timer = new Timer(500, null);
              ActionListener listener = new ActionListener() {
                  private Iterator&lt;Word&gt; w = words.iterator();
                  @Override 
                  public void actionPerformed(ActionEvent e) {
                      if (w.hasNext()) {
                          _textField.setText(w.next().getName());
                          //Prints to Console just Fine...
                          //System.out.println(w.next().getName());
                      }
                      else {
                          timer.stop();
                      }
                  }
              };
              timer.addActionListener(listener);
              timer.start();
  
      }
  </code></pre>
  
  <p>However, it isn't updating the lable? My contructor looks like:</p>
  
  <pre><code>public TimeThis() {
  
      _textField = new JTextField(5);
      _textField.setEditable(false);
      _textField.setFont(new Font("sansserif", Font.PLAIN, 30));
  
      JPanel content = new JPanel();
      content.setLayout(new FlowLayout());
      content.add(_textField); 
  
      this.setContentPane(content);
      this.setTitle("Swing Timer");
      this.pack();
      this.setLocationRelativeTo(null);
      this.setResizable(false);
      //_textField.setText("loading...");
  
  }
  </code></pre>
  
  <p>Getting there... I'll post the fix once I, or whomever assists me, get's it working. Thanks again!</p>