Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9248595
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 18, 20262026-06-18T09:58:47+00:00 2026-06-18T09:58:47+00:00

I have a timer class updating my table but the only way I have

  • 0

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.

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();
            }
    });                    
    }
}

Here is the code for my table

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

I have added this code to the class with the table.

@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);        
    }

And I am looking at adding this to my timer, but it still feels like I am missing something.

BreakTimev21.jTable1.tableChanged(new TableModelEvent(BreakTimev21.jTable1.getModel()));

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 jTable1.setAutoCreateColumnsFromModel(false);

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);

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 BreakTimev21.jTable1.setValueAt(StartIni2.one(), 0, 1); StartIni2 uses java properties now instead of ini4j.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-18T09:58:49+00:00Added an answer on June 18, 2026 at 9:58 am

    First of all you should not be extending JLabel to implement the TableUpdate class.

    There is no reason you can’t use the DefaultTableModel. When you want to change existing data in the model all you do is invoke:

    model.setValueAt(...)
    

    and the table will repaint the cell automatically.

    So when the Timer fires and its time to update the table you could just create your 2-dimensional array with the new data. Then you loop through the array and compare the value in the array with the value in the model. When you find a difference you update the model as I suggested above.

    Or an alternative approach is to keep using your existing model and replace all the data in the model with the data in the array by using the setDataVector() method of DefaultTableModel.

    If you use this second approach then after you initial create the JTable you will want to use:

    table.setAutoCreateColumnsFromModel(false); 
    

    This will make updating of the model faster since it just updates the data and won’t recreate all the TableColumns etc.

    Using either of the approaches here there is no need for you to play with the tableChanged() method.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a timer class..This timer will be started from various portions of my
I have a small class with a timer, but don't have anything for the
I have a static timer class which will be called by ANY webpage to
I have this class in which I run a for loop 10 times. This
I have a class Similar to this public class Model { public TimeSpan Time1
I have an HTTP Request Dispatcher class that works most of the time, but
I have this Timer that is supposed to initiate various actions at 1 second
I have a problem with updating the value of property from code which is
I have one class for selecting, updating and deleting record in db (sql server
Say, I have my coredata structured to something like this... Class classID <- RestKit

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.