基本的に、このプログラムは、各セルを特定の数値で更新する必要がある 9x9 マトリックスです。マトリックス用のテーブルがあります。0 に初期化しました。プログラムは動作していますが、すべてが完了した後、テーブルは 1 回だけ更新されます。(解決策が見つかりました)。
データが舞台裏で変更されているため、表のセルは更新されません。プログラムの実行が終了すると、テーブル全体が更新されます。しかし、各セルに値を割り当てると、各数値がリアルタイムで変化するのを確認したいと考えています。コードのヘルプは本当にありがたいです。
私もコンテナを持たないでこれを試しました。しかし、それもテーブルを更新しませんでした。私が行った調査によると、テーブルに setImmediate(true) を設定する必要があることがわかりました。しかし、私はすでにそれを持っています。
また、フォーラムは言っています
Item itt = container.getItem(cell.getRowIndex() + 1);
Property<Integer> rrr = itt.getItemProperty(cell.getColumnIndex() + 1);
rrr.setValue(num);
上記の行は、UI で変化する数値を反映するのに十分なはずです。しかし、それは起こっていません。私も試しました
table.refreshRowCache();
table.setCacheRate(0.1);
しかし、うまくいきませんでした。
また、フォーラムで 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;
}