如何自动更新已有信息的JavaSWT表单元格?

如何自动更新已有信息的JavaSWT表单元格?,java,swt,sync,Java,Swt,Sync,我正在尝试使用syncexec自动更新此表。我粘贴的代码是一个测试代码,它产生与我所经历的症状相同的症状,但我使用的不是来自外部源的实时数据,而是随机数生成实用程序 我有两个专栏。一列是存放数字1-9的位置。第二列表示实时数据,将经常更改。我想更新第二列 我目前只是添加一些行,这些行确实表示实时数据,但我希望总共只有9行,而不是在几毫秒内添加9行。我知道它这样做是因为我在syncexec中一次又一次地填充表。如何使用syncexec更新在UI中建立的表 import org.eclipse.sw

我正在尝试使用syncexec自动更新此表。我粘贴的代码是一个测试代码,它产生与我所经历的症状相同的症状,但我使用的不是来自外部源的实时数据,而是随机数生成实用程序

我有两个专栏。一列是存放数字1-9的位置。第二列表示实时数据,将经常更改。我想更新第二列

我目前只是添加一些行,这些行确实表示实时数据,但我希望总共只有9行,而不是在几毫秒内添加9行。我知道它这样做是因为我在syncexec中一次又一次地填充表。如何使用syncexec更新在UI中建立的表

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 a = false;

private Label label; //Must import org.eclipse.swt.widgets.Label; then     declare it in the class to 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() 
        {
            for (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;
                                for (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 to 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();
}
}
import org.eclipse.swt.swt;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swt.widgets.Table;
导入org.eclipse.swt.widgets.TableColumn;
导入org.eclipse.swt.widgets.TableItem;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Label;
导入org.eclipse.swt.graphics.Point;
导入org.eclipse.swt.graphics.Rectangle;
导入java.util.Random;
公共类表格自动更新
{
INTU=10;
int i;
INTR;
int d=10;
int c=1;
int v=u+1;
布尔值a=假;
私有标签Label;//必须导入org.eclipse.swt.widgets.Label;然后在类中声明它以使用它。
自有品牌地位;
私人显示器;
专用外壳=新外壳(显示器,SWT.Shell|U TRIM | SWT.CENTER);
公共表自动更新(显示)
{
尝试
{
初始化(显示);
无尾目();
}
捕获(NoClassDefFounde错误)
{
status.setText(例如toString());
}
}
私有void initUI(显示)
{
shell.setLayout(新的GridLayout(3,false));
字符串注册表标签[]=新字符串[u];
状态=新标签(外壳、SWT.边框);
GridData gd2=新的GridData(SWT.FILL,SWT.FILL,true,true);
状态。setLayoutData(gd2);
gd2.0=40;
gd2.heightHint=15;
gd2.水平跨度=3;
表格=新表格(外壳、SWT.边框);
表.setheadervible(true);
表.setLinesVisible(真);
TableColumn tc1=新的TableColumn(表格,SWT.CENTER);
TableColumn tc2=新的TableColumn(表格,SWT.CENTER);
tc1.setText(“寄存器编号”);
tc2.setText(“寄存器值”);
tc1.设定宽度(110);
tc2.设定宽度(110);
int b=1;
Random randomGen=新的Random();
int randomInt=randomGen.nextInt(32000);

对于(i=1;i为开头的行创建9个TableItems

然后使用:

TableItem=table.get(行号);
项目.setText(文本);

获取现有项目并设置其文本。请注意,行号从0开始。

为开头的行创建9个TableItems

然后使用:

TableItem=table.get(行号);
项目.setText(文本);
获取现有项目并设置其文本。请注意,行号从0开始