Java Vaadin表未实时更新
基本上,这个程序是一个9x9矩阵,其中每个单元都需要用特定的数字进行更新。 我有一张矩阵表。已将其初始化为0。程序正在运行,但表只在完成所有操作后更新一次。(找到了解决方案) 由于数据在后台更改,因此表格单元格不会得到更新。 整个表将在程序执行结束时更新。但我想看看每个人 当我给每个单元格赋值时,数字会实时变化。非常感谢任何代码帮助 我也试过不用容器。但这也没有更新表。我做的研究告诉我,setImmediate(true)需要摆在桌面上。但我已经有了 论坛还说Java Vaadin表未实时更新,java,refresh,vaadin,Java,Refresh,Vaadin,基本上,这个程序是一个9x9矩阵,其中每个单元都需要用特定的数字进行更新。 我有一张矩阵表。已将其初始化为0。程序正在运行,但表只在完成所有操作后更新一次。(找到了解决方案) 由于数据在后台更改,因此表格单元格不会得到更新。 整个表将在程序执行结束时更新。但我想看看每个人 当我给每个单元格赋值时,数字会实时变化。非常感谢任何代码帮助 我也试过不用容器。但这也没有更新表。我做的研究告诉我,setImmediate(true)需要摆在桌面上。但我已经有了 论坛还说 Item itt = contai
Item itt = container.getItem(cell.getRowIndex() + 1);
Property<Integer> rrr = itt.getItemProperty(cell.getColumnIndex() + 1);
rrr.setValue(num);
但是没有起作用
我也在论坛上读到了使用valuechangelistner的内容。但是,我没有找到一个好的例子来说明如何做到这一点,如果这是唯一的办法
private Container container = new IndexedContainer();
public class MyVaadinUI extends UI {
@Override
protected void init(VaadinRequest request) {
...
for (int i = 1; i <= 9; i++) {
container.addContainerProperty(i, Integer.class, 0);
}
for (int i = 1; i <= 9; i++) {
container.addItem(i);
}
...
table.setContainerDataSource(container);
table.setImmediate(true);
...
...
/ * this is filling the table correctly with all 0's */
populate.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
...
for (int i = 1; i <= 9; i++) {
Item item = container.getItem(i);
int rowIndex = i - 1;
for (int j = 1; j <= 9; j++) {
Property<Integer> nameProperty = item.getItemProperty(j);
int columnIndex = j - 1;
nameProperty.setValue(uploadReceiver.getMatrix()[rowIndex][columnIndex]);
}
}
}
});
solveButton.addClickListener(new ClickListener() {
private boolean solveSudoko() {
...
for (int num = 1; num <= 9; num++) {
// check if no conflicts then
if (!AreThereConflicts(num, cell.getRowIndex(), cell.getColumnIndex())) {
uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = num;
// Item row = container.getItem(cell.getRowIndex() + 1);
// Property<Integer> col =
// row.getItemProperty(cell.getColumnIndex() + 1);
// col.setValue(num);
Property prop = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
prop.setValue(num);
table.setContainerDataSource(container);
/* Table is not getting updated here ???? */
...
uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = 0; // unassign
// Item itt = container.getItem(cell.getRowIndex() + 1);
// Property<Integer> rrr =
// itt.getItemProperty(cell.getColumnIndex() + 1);
// rrr.setValue(num);
Property prop2 = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
prop2.setValue(num);
table.setContainerDataSource(container);
/* Table is not getting updated here ???? */
}
}
return false;
}
private Container=new IndexedContainer();
公共类MyVaadinUI扩展UI{
@凌驾
受保护的void init(VaadinRequest请求){
...
对于(int i=1;i快速浏览,所有“更改单元格”逻辑似乎都发生在一个clickListener(即solveSoduku)中
事件侦听器中的所有代码都将在单个请求/响应周期内发生,这意味着在方法完成之前UI不会更新:这是Vaadin体系结构的基本部分
如果你想“查看”中间更新,你必须创建一个后台线程来进行解决,然后使用“推送”解决方案来更新表格。Vaadin 7.1.0(最近发布)内置了推送功能,否则请参见Vaadin论坛。我不明白你的问题。你想让Sliptet获得批准吗(意思是你已经找到了一个解决方法)或者你仍然需要一个替代的解决方案(通过值更改)?如果不需要,我不想使用ValueChange。因为如果我使用ValueChange,我只从事件中获取属性。我需要itemId和propertyid来更新单元格(类似-行:itemId,列:propertyid)有关更多详细信息(自述)有了更新的代码,请看感谢您的回复。我按照@CharlesAnthony的建议,做了一个推送解决方案,因为我有了vaadin 7.1。我的it工作比以前更好,但是,响应时间不是很快。而且似乎有一些错误线程没有正常终止,或者是它工作了,但是有时不是。我这里有完整的代码:[链接]
private Container container = new IndexedContainer();
public class MyVaadinUI extends UI {
@Override
protected void init(VaadinRequest request) {
...
for (int i = 1; i <= 9; i++) {
container.addContainerProperty(i, Integer.class, 0);
}
for (int i = 1; i <= 9; i++) {
container.addItem(i);
}
...
table.setContainerDataSource(container);
table.setImmediate(true);
...
...
/ * this is filling the table correctly with all 0's */
populate.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
...
for (int i = 1; i <= 9; i++) {
Item item = container.getItem(i);
int rowIndex = i - 1;
for (int j = 1; j <= 9; j++) {
Property<Integer> nameProperty = item.getItemProperty(j);
int columnIndex = j - 1;
nameProperty.setValue(uploadReceiver.getMatrix()[rowIndex][columnIndex]);
}
}
}
});
solveButton.addClickListener(new ClickListener() {
private boolean solveSudoko() {
...
for (int num = 1; num <= 9; num++) {
// check if no conflicts then
if (!AreThereConflicts(num, cell.getRowIndex(), cell.getColumnIndex())) {
uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = num;
// Item row = container.getItem(cell.getRowIndex() + 1);
// Property<Integer> col =
// row.getItemProperty(cell.getColumnIndex() + 1);
// col.setValue(num);
Property prop = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
prop.setValue(num);
table.setContainerDataSource(container);
/* Table is not getting updated here ???? */
...
uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = 0; // unassign
// Item itt = container.getItem(cell.getRowIndex() + 1);
// Property<Integer> rrr =
// itt.getItemProperty(cell.getColumnIndex() + 1);
// rrr.setValue(num);
Property prop2 = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
prop2.setValue(num);
table.setContainerDataSource(container);
/* Table is not getting updated here ???? */
}
}
return false;
}