Vaadin-Tabelle nicht aktualisieren in Echtzeit

Grundsätzlich dieses Programm ist eine 9x9-matrix, wo jede Zelle die aktualisiert werden müssen, mit certains zahlen.
Ich habe eine Tabelle für die matrix. Initialisiert ihn zu 0. Programm funktioniert, aber die Tabelle wird immer nur aktualisiert, einer nach dem alles erledigt ist. (eine Lösung wird gefunden).

Zellen der Tabelle werden nicht immer aktualisiert, sobald sich die Daten ändern, die hinter der Szene.
Die gesamte Tabelle wird immer aktualisiert, am Ende der Ausführung des Programms. Aber ich will sehen, jeder
Anzahl ändern, in Echtzeit, wie ich einen Wert zuweisen jeder Zelle. Jeder code ist Hilfe wirklich zu schätzen.

Ich versucht dies mit nicht mit einem container zu. aber nicht, aktualisieren Sie die Tabelle. Die Forschung, die ich habe sagt mir, dass setImmediate(true) gesetzt werden müssen auf den Tisch. Aber ich habe das ja auch schon.

Auch, die Foren sagen

Item itt = container.getItem(cell.getRowIndex() + 1);
Property<Integer> rrr = itt.getItemProperty(cell.getColumnIndex() + 1);
rrr.setValue(num);

Den obigen Zeilen sollten ausreichen, um zu reflektieren, die zahlen ändern sich in der Benutzeroberfläche. Aber es ist nicht passiert. Ich habe auch versucht

table.refreshRowCache();
table.setCacheRate(0.1);

Aber hat nicht funktioniert.

Ich habe auch im forum gelesen das die Verwendung einer valuechangelistner. Aber, ich war nicht in der Lage zu finden, ein gutes Beispiel, das zeigt mir, wie dies zu tun, iff dies ist der einzige Weg zu gehen

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;

        }
  • Ich komme Nicht auf deine Frage. Wollen Sie Ihre slipptet genehmigt( meaningbyou schon einen workaround) oder Benötigen Sie noch eine Alternative Lösung ( über den Wert ändern)?
  • Ich möchte nicht ValugeChange, wenn ich nicht zu. Weil wenn ich ValueChange ich bin nur immer das Eigentum von der Veranstaltung. Ich brauche die itemId und die propertyid sowohl zum aktualisieren einer Zelle(Analogie - Reihe: itemId, Spalte: propertyid)
  • Für mehr Informationen (readme) mit einem aktualisierten code finden Sie in der github.com/sbollap1/sudoku
InformationsquelleAutor sbolla | 2013-06-29
Schreibe einen Kommentar