How do I automatically update Java SWT table cells that already have information? -


i trying update table automatically syncexec. code pasting test code produces same symptoms experiencing, instead of live data external source, using random number generating utility.

i have 2 columns. 1 column place holding number 1-9. second column represents live data , change. want second column update.

i adding rows indicate live data, have 9 rows total, not 9 added rows ever few milliseconds. know it's doing because populating table on , on in syncexec. how update table established in ui, syncexec?

import org.eclipse.swt.swt; import org.eclipse.swt.widgets.display; import org.eclipse.swt.widgets.shell; import org.eclipse.swt.widgets.table; import org.eclipse.swt.widgets.tablecolumn; import org.eclipse.swt.widgets.tableitem; import org.eclipse.swt.layout.griddata; import org.eclipse.swt.layout.gridlayout; import org.eclipse.swt.widgets.label; import org.eclipse.swt.graphics.point; import org.eclipse.swt.graphics.rectangle; import java.util.random;  public class tableautoupdate { int u = 10;      int i;   int r; int d = 10; int c = 1; int v = u+1;  boolean = false;  private label label; //must import org.eclipse.swt.widgets.label;     declare in class use it. private label status; private display display; private shell shell = new shell(display, swt.shell_trim | swt.center );  public tableautoupdate(display display) {     try     {     initui(display);     invalidateuidata();     }      catch (noclassdeffounderror e)     {         status.settext(e.tostring());     } }   private void initui(display display) {     shell.setlayout(new gridlayout(3, false));     string registerlabels[] = new string[u];     status = new label(shell, swt.border);      griddata gd2 = new griddata(swt.fill, swt.fill, true, true);        status.setlayoutdata(gd2);     gd2.widthhint = 40;     gd2.heighthint = 15;     gd2.horizontalspan = 3;      table table = new table(shell, swt.border);     table.setheadervisible(true);     table.setlinesvisible(true);      tablecolumn tc1 = new tablecolumn(table, swt.center);     tablecolumn tc2 = new tablecolumn(table, swt.center);       tc1.settext("register number");     tc2.settext("register value");       tc1.setwidth(110);     tc2.setwidth(110);      int b = 1;      random randomgen = new random();     int randomint = randomgen.nextint(32000);      for(i=1; i<u; i++)     {     status.settext("valid numbers");     tableitem item1 = new tableitem(table, swt.none);     registerlabels[i] = integer.tostring(b);     item1.settext(new string[] {registerlabels[i],     item1.gettext(randomint)});     b++;     }       shell.setsize(300, 300);     status.gettext();         shell.settext("modbus tags");     centerwindow(shell);     shell.open();          new thread()      {         @override         public void run()          {             (final int l = 1; l <= l; )              {             try              {                 thread.sleep (100);             }              catch (throwable th)              {              }                 if (display.isdisposed()) return;                 display.syncexec(new runnable()                  {                     @override                     public void run()                     {                                try                             {                                 int b = 1;                                 (r = 1; r < u; r++)                                 {                                     random randomgen = new random();                                     int randomint =     randomgen.nextint(32000);                                     status.settext("random number table     update");                                     tableitem item1 = new tableitem(table,     swt.none);                                     registerlabels[r] = integer.tostring(b);                                     item1.settext(new string[]     {registerlabels[r], integer.tostring(randomint)});                                     b++;                                 }                             }                             catch (exception e)                             {                                 status.settext("invalid number");                                 try                                  {                                     thread.sleep (1000);                                 }                                  catch (throwable th)                                  {                                  }                                 invalidateuidata();                             }                         }                     });             }         }     }.start();       while (!shell.isdisposed())      {         if (!display.readanddispatch())             display.sleep();     } }   void invalidateuidata() {    status.settext("unable numbers."); }  private void centerwindow(shell shell) {      rectangle bds = shell.getdisplay().getbounds();      point p = shell.getsize();      int nleft = (bds.width - p.x) / 2;     int ntop = (bds.height - p.y) / 2;      shell.setbounds(nleft, ntop, p.x, p.y); }   @suppresswarnings("unused") public static void main(string[] args) {      display display = new display();     tableautoupdate ex = new tableautoupdate(display);     display.dispose(); } } 

create 9 tableitems rows @ beginning.

then use:

tableitem item = table.get(rownumber);  item.settext(text); 

to existing items , set text. note rownumber starts @ 0.


Comments