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