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
Post a Comment