title: updating java table
body: <p>I have a timer class updating my table but the only way I have found to affect a change is to use this code. It is essentially a break time application. I am using ini4j to read an ini file on the network. It does work but it's creating speed issues with other things I am doing. With the current setup it shows the times more or less correctly but start to lag when I add more people. If you answer is learn jTables that's not going to be helpful lol. I havn't been able to get this to work using jtables and fireupdate changes.</p>
  
  <pre><code>import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.io.File;
  import java.io.IOException;
  import java.text.SimpleDateFormat;
  import java.util.TimeZone;
  
  import javax.swing.JLabel;
  import javax.swing.JTable;
  import javax.swing.SwingUtilities;
  import javax.swing.Timer;
  
  import main.Break;
  
  import org.ini4j.InvalidFileFormatException;
  import org.ini4j.Wini;
  
  public class TableUpdate extends JLabel implements ActionListener {
  
      /**
       * 
       */
      private static final long serialVersionUID = 4357754555235469274L;
      private volatile static boolean running = true;
      SimpleDateFormat UTC = new SimpleDateFormat("HH:mm:ss");    
      Timer breaktimer = new Timer(1000, this);   
      public static long now = System.currentTimeMillis();
  
      final static String local = ConfigIni.location();
      final static File FILENAME = new File(local+"\\master.ini");
  
      @Override
      public void actionPerformed(ActionEvent arg0) {
          Runnable runnable = new Runnable() {
               public void run() {
  
                      tableupdate();  
               }};
              SwingUtilities.invokeLater(runnable);
          }
  
      public void tableupdate() {  
          UTC.setTimeZone(TimeZone.getTimeZone("UTC"));          
              Wini ini = null;
              try {
                  ini = new Wini(FILENAME);
              } catch (InvalidFileFormatException e1) {               
                  e1.printStackTrace();
              } catch (IOException e1) {              
                  e1.printStackTrace();
              }
              String number = ini.get("analysts", "number");
  
              if (number.equals("8")) {
                  Break.jTable1.setModel(new javax.swing.table.DefaultTableModel(
                   new Object [][] {
                   {AnalystIni.one(), StartIni.one(), BreakIni.one(), TypeIni.one()},
                   {AnalystIni.two(), StartIni.two(), BreakIni.two(), TypeIni.two()},
                   {AnalystIni.three(), StartIni.three(), BreakIni.three(), TypeIni.three()},
                   {AnalystIni.four(), StartIni.four(), BreakIni.four(), TypeIni.four()},
                   {AnalystIni.five(), StartIni.five(), BreakIni.five(), TypeIni.five()},
                   {AnalystIni.six(), StartIni.six(), BreakIni.six(), TypeIni.six()},
                   {AnalystIni.seven(), StartIni.seven(), BreakIni.seven(), TypeIni.seven()},
                   {AnalystIni.eight(), StartIni.eight(), BreakIni.eight(), TypeIni.eight()},              
                           },
                           new String [] {
                           "Analyst", "Start Time", "Timer", "Status"
                           }
                       ));
  
  
              }
      }
  
      public void start()  {
  
          running = true;
          breaktimer.start();
      }
  
      public void stop() {
  
          running = false;
      }
  
      public static void main(String[] args) {    
  
          java.awt.EventQueue.invokeLater(new Runnable() {
          public void run() {         
              TableUpdate jtl = new TableUpdate();
              jtl.start();
              }
      });                    
      }
  }
  </code></pre>
  
  <p>Here is the code for my table</p>
  
  <pre><code>try {
              jTable1.setModel(new javax.swing.table.DefaultTableModel(
  
                  new Object [][] {
                      {AnalystIni.one(), StartIni.one(), BreakIni.one(), TypeIni.one()},
                      {AnalystIni.two(), StartIni.two(), BreakIni.two(), TypeIni.two()},
                      {AnalystIni.three(), StartIni.three(), BreakIni.three(), TypeIni.three()},
                      {AnalystIni.four(), StartIni.four(), BreakIni.four(), TypeIni.four()},
                      {AnalystIni.five(), StartIni.five(), BreakIni.five(), TypeIni.five()},
                      {AnalystIni.six(), StartIni.six(), BreakIni.six(), TypeIni.six()},
                      {AnalystIni.seven(), StartIni.seven(), BreakIni.seven(), TypeIni.seven()},
                      {AnalystIni.eight(), StartIni.eight(), BreakIni.eight(), TypeIni.eight()}
                  },
                  new String [] {
                      "Analyst", "Time Started", "Timer", "Status"
                  }
              ));
          } catch (Exception e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          JTableHeader header = jTable1.getTableHeader();
          header.setBackground(SettingsIni.jtable1h());
          header.setForeground(SettingsIni.jtable1ht());
          jTable1.setBackground(SettingsIni.jtable1());
          jTable1.setForeground(SettingsIni.jtable1t());
          jTable1.setOpaque(false);
          jScrollPane1.setViewportView(jTable1);
          jScrollPane1.setOpaque(false);
          jTable1.setFocusable(false);
          //jScrollPane1.setBorder(BorderFactory.createMatteBorder(0,1,0,0,Color.black));
          jScrollPane1.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
  
          jScrollPane1.getViewport().setOpaque(false);
          final Color jcolor1 = new Color(0, true);
          jScrollPane1.getViewport().setBackground(jcolor1);
  
          getRootPane().setBorder(BorderFactory.createEmptyBorder(0,0,0,0));//removed border
  </code></pre>
  
  <p>I have added this code to the class with the table.</p>
  
  <pre><code>@Override
      public void tableChanged(TableModelEvent e) {
          int row = e.getFirstRow();
          int column = e.getColumn();
          TableModel model = (TableModel)e.getSource();
          String columnName = model.getColumnName(column);
          Object data = model.getValueAt(row, column);        
      }
  </code></pre>
  
  <p>And I am looking at adding this to my timer, but it still feels like I am missing something.    </p>
  
  <pre><code>BreakTimev21.jTable1.tableChanged(new TableModelEvent(BreakTimev21.jTable1.getModel()));
  </code></pre>
  
  <p>From camickr I tried this in my tableupdate class. Still didn't help, it does update but is kinda glitchy. I did remember to use <code>jTable1.setAutoCreateColumnsFromModel(false);</code></p>
  
  <pre><code>Object [][] data = {
                          {a1, StartIni2.one(), BreakIni2.one(), TypeIni2.one()},
                          {a2, StartIni2.two(), BreakIni2.two(), TypeIni2.two()},
                          {a3, StartIni2.three(), BreakIni2.three(), TypeIni2.three()},
                          {a4, StartIni2.four(), BreakIni2.four(), TypeIni2.four()},
                          {a5, StartIni2.five(), BreakIni2.five(), TypeIni2.five()},
                          {a6, StartIni2.six(), BreakIni2.six(), TypeIni2.six()},
                          {a7, StartIni2.seven(), BreakIni2.seven(), TypeIni2.seven()},
                          {a8, StartIni2.eight(), BreakIni2.eight(), TypeIni2.eight()},
                      };
                      String [] columnNames = {
                          "Analyst", "Start Time", "Timer", "Status"
                      };
  
                      TableModel model = BreakTimev21.jTable1.getModel();
                      ((DefaultTableModel) model).setDataVector(data, columnNames);
  </code></pre>
  
  <p>I stopped using ini4j for the read part of tableupdate and just used java properties, which helped witht he speed a lot but still did not resolve. setDataVector works just as well as <code>BreakTimev21.jTable1.setValueAt(StartIni2.one(), 0, 1);</code> StartIni2 uses java properties now instead of ini4j.</p>