Как добавить добавить TreeModelListener в наброски NetBeans? - PullRequest
3 голосов
/ 19 января 2010

Я использую модель OutBeans Outline для создания TreeTable, метод описан здесь :

Все выглядит красиво и чисто, и теперь я хочу добавить TreeModelListener в мою модель, чтобыприслушайтесь к изменениям в модели:

Outline outline = new Outline();
MyNode root = new MyNode("data", 0);
//...
TreeModel treeMdl = new MyTreeModel(root);
OutlineModel mdl = 
DefaultOutlineModel.createOutlineModel(treeMdl, new MyRowModel(), true, "Data");
mdl.addTreeModelListener(new MyTreeModelListener());
outline.setModel(mdl);
//...

public class MyTreeModelListener implements TreeModelListener {
    public void treeNodesChanged(TreeModelEvent e) {
        System.out.println("Something happend");

    }

    public void treeNodesInserted(TreeModelEvent e) {
        // TODO Auto-generated method stub

    }

    public void treeNodesRemoved(TreeModelEvent e) {
        // TODO Auto-generated method stub

    }

    public void treeStructureChanged(TreeModelEvent e) {
        // TODO Auto-generated method stub

    }

}

Все работает, как и ожидалось, но моя проблема ниже, я написал свой собственный класс TreeModel, и это, очевидно, означает, что я должен написать свой собственный метод addTreeModelListener,но как мне это сделать?

public class MyTreeModel implements TreeModel {

    private MyNode root;

    public MyTreeModel(SdbNode root) {
        this.root = root;
    }

    @Override
    public void addTreeModelListener(TreeModelListener l) {
        //TODO:
    }

    //...
}

1 Ответ

1 голос
/ 19 января 2010

javax.swing.event.EventListenerList справится с большей частью тяжелой работы. Параметр class для методов add, remove и getListeners позволяет вам сохранить всех ваших слушателей в одном списке, а затем извлечь подмножество только того типа, который вы хотите.

Примечание: параметр class является классом интерфейса , а не классом реализации .

В основном это выглядит так:

    private EventListenerList listeners = null;

    public void addTreeModelListener(TreeModelListener l) {
        if (l == null)
            return;
        if (listeners == null)
            listeners = new EventListenerList();
        listeners.add(TreeModelListener.class, l);
    }

    public void removeTreeModelListener(TreeModelListener l) {
        if (l == null)
            return;
        if (listeners == null)
            return;
        listeners.remove(TreeModelListener.class, l);
    }

    private void fireTreeStructureChanged(TreeModelEvent e) {
        if (e == null)
            return;
        if (listeners == null)
            return;
        TreeModelListener[] ll = listeners.getListeners(TreeModelListener.class);
        for(int i = 0; i < ll.length; i++)
            ll.treeStructureChanged(e);
    }

Если вы поддерживаете остальные уведомления модели, вам нужно реализовать варианты последнего метода, который вызывает treeNodesInserted, treeNodesRemoved или treeNodesChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...