在许多不同类之间的Java中同步事件/数据

时间:2015-03-22 04:41:11

标签: java swing

我的问题是关于在编程gui时同步数据和事件的概念。 (这个例子显示了批处理状态是在两个不同的框架中实现相同接口和动态更新单元的类的促进者。这个代码是我的想法。)

我假设我将专门在触发事件的类(面板)中创建此批处理状态对象的新实例以及对该事件的反应(另一个面板)。我将通过添加需要与bsListeners列表进行通信的类来完成此操作。然后调用批处理状态函数,如" setSelectedCell()"迭代每个类以同步它们。

问题 如果对象共享相同的arrayList但是因为它们都是新的实例,那么这将是完美的。我尝试将内容更改为静态,特别是在界面中它很吓人。这种方法是否合乎逻辑我是编程gui的新手?对不起,这是一部小说。

interface BatchStateListener {

    public void valueChanged(Cell cell, String newValue);

    public void selectedCellChanged(Cell newSelectedCell)
}

class BatchState {

    private String[][] values;
    private Cell selectedCell;
    private List<BatchStateListener> listeners;

    public BatchState(int records, int fields) {
        values = new String[records][fields];
        selectedCell = null;
        listeners = new ArrayList<BatchStateListener>();
    }

    public void addListener(BatchStateListener l) {
        listeners.add(l);
    }

    public void setValue(Cell cell, String value) {

        values[cell.record][cell.field] = value;

        for (BatchStateListener l : listeners) {
            l.valueChanged(cell, value);
        }
    }

    public String getValue(Cell cell) {
        return values[cell.record][cell.field];
    }

    public void setSelectedCell(Cell selCell) {

        selectedCell = selCell;

        for (BatchStateListener l : listeners) {
            l.selectedCellChanged(selCell);
        }
    }

    public Cell getSelectedCell() {
        return selectedCell;
    }
}

1 个答案:

答案 0 :(得分:0)

我的问题有点令人困惑,但我找到了答案。我只是想知道如何在我的代码中实现这个BatchState类。我发现如果我在main中创建它并将它传递给需要相互通信的构造函数框架/面板,它们都可以共享它的引用。