Проблемы с программным выбором узлов флажка

У меня есть группа флажков, перечисленных в древовидной структуре. Дерево связано с вектором, который хранит состояние флажков в дереве. У меня есть кнопки для выбора всех флажков и другие кнопки для выбора соответствующего флажка. Из приведенной ниже диаграммы вы можете изобразить пользовательский интерфейс.

введите здесь описание изображения

for (CheckBoxNode Node : CheckBoxNodeTree.checkBoxRows) {
if(Node.isSelected()){
Node.setSelected(!Node.isSelected());
        }

Для выбора всего используется код:

TreeModel model = TREE.getModel();
        TreeNode  rootofTree = (TreeNode) model.getRoot();

        Enumeration<TreeNode> enumeratorForTree =                ((DefaultMutableTreeNode)rootofTree).breadthFirstEnumeration();
        while (enumeratorForTree.hasMoreElements()) {
         TreeNode child = enumeratorForTree.nextElement();
         Object currentNode = ((DefaultMutableTreeNode) child).getUserObject();
         if(currentNode instanceof CheckBoxNode) {

                ((CheckBoxNode) currentNode).setSelected(true);
         }
        }
        for (CheckBoxNode Node: CheckBoxNodeTree.checkBoxRows) 
        {
        Node.setSelected(true);
        }

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что при нажатии соответствующих кнопок состояние флажка изменяется, но после нажатия кнопки «Выбрать все» я вижу, что узлы проверяются, но после этого, если я попытаюсь выбрать отдельные узлы с помощью соответствующую кнопку, я не вижу результат на дереве. Может ли кто-нибудь помочь мне с вашими предложениями. Заранее спасибо ответившему.


person Sakthi.droid    schedule 03.02.2012    source источник
comment
Это опечатка? Вы используете разные перечисления. while (enumeratorForTree.hasMoreElements()) { TreeNode child = enumeratorForColumnTree.nextElement();   -  person Dodd10x    schedule 03.02.2012
comment
Мне не совсем понятен ваш вопрос. Ничто не упоминает, когда вы очищаете флажки? Где-то вы должны установить их обратно в false? Проверка уже установленного флажка не работает?   -  person Gus    schedule 03.02.2012
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 03.02.2012
comment
пожалуйста, изучите соглашения об именах Java и придерживайтесь их   -  person kleopatra    schedule 03.02.2012


Ответы (2)


Похоже на проблему с уведомлением - вы меняете состояние узла без ведома модели. Предполагая, что ваша модель является DefaultTreeModel, вызовите model.nodeChanged после изменения выбора:

currentNode.setSelected(newState);
model.nodeChanged(currentNode);
person kleopatra    schedule 03.02.2012
comment
изучение предмета дня Я был бы уверен, что XxxEditor уведомил DefaultXxxModel +1 - person mKorbel; 03.02.2012
comment
@mKorbel - редактор делает (на самом деле это CellEditorListener дерева где-то был в делегате пользовательского интерфейса), но здесь вопрос (как я понял) касается программного изменения состояния узла - person kleopatra; 03.02.2012
comment
согласен с вопросом, но до этого момента я был уверен, что Enumeration изменил все JComponents в узле, и весь код, который у меня есть, работает без этого, интересно, спасибо - person mKorbel; 03.02.2012

Где находится код ваших кнопок, используемых для выбора отдельных узлов? Вы пытаетесь сделать кнопку, которая переключается, но у вас сейчас только флажок? Может быть, попробуйте это:

 buttonPushed() {
     //get your node for this button
    node.setSelected(!node.isSelected());
 }
person Dodd10x    schedule 03.02.2012
comment
На самом деле, после выбора всего я вижу, что узлы проверяются. Но после этого, если мы нажмем любую другую кнопку, я не смогу увидеть соответствующее изменение в соответствующем узле. - person Sakthi.droid; 03.02.2012