Доброго времени суток.
Имеется панель на который расположен CheckBox и JTree
Дерево строиться на основе мапы
{2=1,3=1,4=2} ,где под каждой цифрой стоит своё слово.
Вот код создания дерева
Код:
DefaultMutableTreeNode top[]=new DefaultMutableTreeNode[1000];// max number of levels
for (int i=1;i<StoreInfFun.length;i++)
{
top[i]=new DefaultMutableTreeNode(StoreInfFun[i].RetFunc());//.append("Loop x-").append(repeat.SortingFunc.get(i)));
}
for(int i=2;i<StoreInfFun.length;i++)
{
if (Integer.parseInt(SimpleVis.FamConn.get(i).toString())!=0)
top[Integer.parseInt(SimpleVis.FamConn.get(i).toString())].add(top[i]);
}
treeModel = new DefaultTreeModel(top[1]);
tree = new JTree(treeModel);
Чек бокс строиться из уникальных элементов мапы вот код
Код:
final JCheckBox ChekBox[] = new JCheckBox[repeat.Un.size()];
int t;
for(int i=1;i<repeat.Un.size()+1;i++)
{
ChekBox[i-1]=new JCheckBox(repeat.Un.get(i).toString());
ChekPanal.add(ChekBox[i-1]);
ChekBox[i-1].setSelected(true);
CheckBoxs[i]=true;
}
for(t=0;t<repeat.Un.size();t++)
ChekBox[t].addItemListener(this);
При каждом клике на чек бокс удаляется определенный элемент из дерева
Код:
startRow = 2;//Откуда начинаем
prefix =repeats.Un.get(IndexLast+1).toString();//Что ищем
if(State==2)//Если галка
for(int i = 0; i < tree.getRowCount(); i ++) tree.expandRow(i);//Раскрываем все ветви
try{
while(tree.getNextMatch(prefix, startRow, Position.Bias.Backward)!=null) //Удаляеем все отмечены
{
TreePath path = tree.getNextMatch(prefix, startRow, Position.Bias.Backward);//Ищем необходимые ветви
MutableTreeNode node = (MutableTreeNode)path.getLastPathComponent();
//смотрим на положение
if(State==2)
model.removeNodeFromParent(node);//Удаляемые компоненты
tree.repaint();
startRow++;
}
for(int i = tree.getRowCount()-1; i > 0; i --) tree.collapseRow(i);
}
catch(IllegalArgumentException ex)
{
return;
}
Вопрос в том ,что при повторной отметки чек бокса необходимо восстановить удаленные ветви. Пытался просто копировать из копии дерева
Не работает
Так же пробовал перерисовывать заново все дерево с помощью
Код:
TreePath path = tree.getNextMatch(prefix, startRow, Position.Bias.Forward);
TreeNode node = (TreeNode)path.getLastPathComponent();
MutableTreeNode newNode = new DefaultMutableTreeNode(top[1]);
MutableTreeNode newNodes = new DefaultMutableTreeNode(top[2]);
node.getChildCount());
node = (MutableTreeNode)path.getPathComponent(0);
model.insertNodeInto(newNode, newNodes, node.getChildCount());
Вопрос заключается в том как с помощью модели дерева построить новое дерево