content: package net.gcdc;
  
  import java.awt.BorderLayout;
  import java.util.ArrayList;
  import java.util.List;
  import javax.swing.*;
  import net.gcdc.plugtestcms4.*;
  import net.gcdc.plugtestcms4.ping.*;
  
  public class PlugTestCMS4
    extends JFrame
  {
    private final List<DUT> dutList = new ArrayList<> ();
    final JTabbedPane tabbedPane;
    final DUTsPane dutsPane;
  
    public PlugTestCMS4 ()
    {
      this.dutList.add (new DUT ("i-Game-1", "192.168.159.101", "192.168.73.201", 1236));
      this.dutList.add (new DUT ("i-Game-2", "192.168.159.102", "192.168.73.202", 1237));
      this.dutList.add (new DUT ("i-Game-3", "192.168.159.103", "192.168.73.203", 1238));
      setTitle ("PlugTestCMS4 Manager - i-Game");
      setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      this.tabbedPane = new JTabbedPane ();
      this.dutsPane = new DUTsPane ();
      this.tabbedPane.add ("DUTs", this.dutsPane);
      setContentPane (this.tabbedPane);
      pack ();
    }
  
    public static void main (String[] args)
    {
      SwingUtilities.invokeLater (new Runnable ()
        {
          public void run ()
          {
            new PlugTestCMS4 ().setVisible (true);
          }
        });
    }
  
  
  
    private class DUTsPane
    extends JComponent
    {
  
      final DUTTableModel model;
      final JScrollPane scrollPane;
      final JTable table;
  
      public DUTsPane ()
      {
        this.model = new DUTTableModel (PlugTestCMS4.this.dutList);
        this.table = new JTable (this.model);
        this.table.setDefaultRenderer (PingStatus.class, new PingStatusRenderer (true));
        this.scrollPane = new JScrollPane (this.table);
        setLayout (new BorderLayout ());
        add (this.scrollPane, BorderLayout.CENTER);
        new UpdateThread ().start ();
      }
  
      private class UpdateThread extends Thread
      {
        @Override
        public void run ()
        {
          try
          {
            while (true)
            {
              Thread.sleep (3000L);
              if (DUTsPane.this.model != null)
                SwingUtilities.invokeLater (new Runnable ()
                {
                  @Override
                  public void run ()
                  {
                    DUTsPane.this.model.fireTableDataChanged ();
                  }
                });
            }
          }
          catch (InterruptedException ie)
          {
            // Nothing to do; fall through and terminate Thread.
          }
        }
      }
  
    }
  
  }
  