Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по дереву / 9 сообщений из 9, страница 1 из 1
23.07.2007, 15:32:30
    #34677604
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
НИкак не могу разобраться, мне нужно сделать так: при раскрытии узла дерева из базы добавляются элементы в дерево и отображаются, т.е.:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   void  expandedEvent(TreeExpansionEvent e){
   TreePath tp= e.getPath();
           DefaultMutableTreeNode selectNode1=(DefaultMutableTreeNode)tp.getLastPathComponent();
              tree.setSelectionPath(tp);
              DefaultTreeModel model=(DefaultTreeModel)tree.getModel();
               for ( int  i= 0 ;i< 5 ;i++){
                    DefaultMutableTreeNode newNode =  new  DefaultMutableTreeNode("number: "+i);
                    newNode.setAllowsChildren(true);
                    model.insertNodeInto(newNode, selectNode1, selectNode1.getChildCount());
                  }
}
Далее, когда пользователь закрывает узел, мне нужно, чтобы с узла удалялись все элементы, т.е.:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 public   void  collapsedEvent(TreeExpansionEvent e){
  DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
     if  (selectedNode ==  null )  return ;
      int  childs = selectedNode.getChildCount();
      DefaultTreeModel model= (DefaultTreeModel)tree.getModel();
       for  ( int  i =  0 ; i < childs; i++){
          model.removeNodeFromParent((DefaultMutableTreeNode) selectedNode.getChildAt( 0 ));
    }
}
Но в результате после удаления, узел становится листом, короче ничего не получается, как сделать правильно не могу понять, мне нужно чтобы узел оставался узлом после удаления, но при этом чтобы в нем ничего не было.Может нужно модель возвестить об удалении, если да, то я не знаю что именно писать в метод:
Код: plaintext
1.
2.
nodesWereRemoved(TreeNode node,
                              int [] childIndices,
                             Object[] removedChildren)
где брать этот int[] childIndices чтобы вставить туда, короче запуталась совсем
ХЭЛП
...
Рейтинг: 0 / 0
24.07.2007, 11:09:52
    #34679291
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
Помогите
...
Рейтинг: 0 / 0
24.07.2007, 11:17:09
    #34679328
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
в методе isLeaf() для узла что возвращается?
свою модель не пробовали написать?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.07.2007, 11:18:42
    #34679336
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
Или еще проще - оставьте один фальшивый подузел в закрытом состоянии, перед открытием удаляйте его - и будет вас счастье.
...
Рейтинг: 0 / 0
24.07.2007, 14:21:40
    #34680170
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
ДуремарИли еще проще - оставьте один фальшивый подузел в закрытом состоянии, перед открытием удаляйте его - и будет вас счастье.
это как, подробнее можно пожалуйста
...
Рейтинг: 0 / 0
24.07.2007, 14:32:04
    #34680215
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
Deady
в методе isLeaf() для узла что возвращается?
свою модель не пробовали написать?
Posted via ActualForum NNTP Server 1.4
модель пробовала написать, но что-то там не все получилось,расскажу все как я делаю,посмотрите пожалуйста что не так и скажите
вот моя модель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
 class  FModelTree  extends  DefaultTreeModel {
     DefaultMutableTreeNode top;
     Vector result,leaf;
     dynamictree.ConnectDB db= new  dynamictree.ConnectDB();
     Connection con;


        FModelTree(){
             super ( null );

            top= new  DefaultMutableTreeNode(getTop());
            Vector sub=getCategory( this .getTop());


                if (sub.size()== 0 ){
                 top.setAllowsChildren(true);
               } else {
                  for ( int  i= 0 ;i<result.size();i++){
                    FBeanNode subB=(FBeanNode)result.elementAt(i);
                       DefaultMutableTreeNode subMutable=  new  DefaultMutableTreeNode(subB);
                       top.add(subMutable);
                  }
               }
                    this .setRoot(top);
               }



      public   FBeanNode getTop(){
         FBeanNode topNode= new  FBeanNode();
         con=db.getConnection();
         PreparedStatement pst= null ;
         ResultSet rs= null ;
                  try {
                    pst=con.prepareStatement("select id,name from ListGroup where id_parent is null");
                    rs=pst.executeQuery();

                 while (rs.next()){
                     topNode.setID(rs.getInt( 1 ));
                     topNode.setName(rs.getString( 2 ));
                }

              rs.close();
              pst.close();
              con.close();

             } catch (Exception h){
                 h.printStackTrace();
             }
               return  topNode;
         }




         public  Vector getLeaf(FBeanNode object){

                           con=db.getConnection();
                           PreparedStatement pst= null ;
                           ResultSet rs= null ;
                           PodrostokBean beanPodr= null ;
                           leaf= new  Vector();
            try {

                      pst=con.prepareStatement("select id,name,surname from ListPodrostki where id_group=?");
                      pst.setInt( 1 ,object.getID());

                      rs=pst.executeQuery();
                          while (rs.next()){
                           beanPodr= new  PodrostokBean();
                              beanPodr.setID(rs.getInt( 1 ));
                              beanPodr.setName(rs.getString( 2 ));
                              beanPodr.setSurName(rs.getString( 3 ));
                              leaf.add(beanPodr);
                         }


                     rs.close();
                     pst.close();
                     con.close();

          } catch (Exception h){
             h.printStackTrace();
          }
                 return  leaf;
        }



          public  Vector getCategory(FBeanNode object){
                con=db.getConnection();
                PreparedStatement pst= null ;
                ResultSet rs= null ;
                FBeanNode bean= null ;
                result= new  Vector();
            try {
                   if (object== null ){
                      pst=con.prepareStatement("select id,name from ListGroup where id_parent is null");
                  } else {
                      pst=con.prepareStatement("select id,name from ListGroup where id_parent=?");
                      System.err.println("select id,name from ListGroup where id_parent="+object.getID());
                      pst.setInt( 1 ,object.getID());
                  }
                      rs=pst.executeQuery();
                          while (rs.next()){
                           bean= new  FBeanNode();
                              bean.setID(rs.getInt( 1 ));
                              bean.setName(rs.getString( 2 ));
                              result.add(bean);
                         }



                     rs.close();
                     pst.close();
                     con.close();

             } catch (Exception h){
                h.printStackTrace();
               }
                    return  result;
    }
}
в модели этой я данные из базы беру, а потом в дерево вставляю,вставляю так:
Код: plaintext
1.
FModelTree model= new  FModelTree();
tree.setModel(model);
еще у меня есть класс для прослушки событий открытия и закрытия узла дерева,вот он:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
 class  FExpandCollapse  implements  TreeExpansionListener{
   JTree mytree;
   FModelTree model2;


   public  FExpandCollapse(JTree tree){
       mytree=tree;
       model2=(FModelTree)mytree.getModel();
   }
   
   
   // Required by TreeExpansionListener interface.
   public   void  treeExpanded(TreeExpansionEvent e) {
      expandedEvent(e);
  }



  // Required by TreeExpansionListener interface.
   public   void  treeCollapsed(TreeExpansionEvent e) {
      collapsedEvent(e);
    }





     public   void  expandedEvent(TreeExpansionEvent e){

      TreePath tp= e.getPath();


              DefaultMutableTreeNode selectNode1=(DefaultMutableTreeNode)tp.getLastPathComponent();
              mytree.setSelectionPath(tp);


              FBeanNode b=(FBeanNode)selectNode1.getUserObject();


                Vector sub=model2.getCategory(b);
                Vector leaf=model2.getLeaf(b);

                 for ( int  i= 0 ;i<sub.size();i++){
                    DefaultMutableTreeNode newNode =  new  DefaultMutableTreeNode((FBeanNode)sub.elementAt(i));
                    newNode.setAllowsChildren(false);
                    model2.insertNodeInto(newNode, selectNode1, selectNode1.getChildCount());
                  }

                for ( int  j= 0 ;j<leaf.size();j++){
                 DefaultMutableTreeNode newNode2 =  new  DefaultMutableTreeNode((PodrostokBean)leaf.elementAt(j));
                 newNode2.setAllowsChildren(false);
                 model2.insertNodeInto(newNode2, selectNode1, selectNode1.getChildCount());
               }
    }



     public   void  collapsedEvent(TreeExpansionEvent e){
      DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)mytree.getLastSelectedPathComponent();
   if  (selectedNode ==  null )  return ;
   int  childs = selectedNode.getChildCount();

   for  ( int  i =  0 ; i < childs; i++)
           model2.removeNodeFromParent((DefaultMutableTreeNode) selectedNode.getChildAt( 0 ));
    }


}
потом этот класс на дерево ципляю:
Код: plaintext
tree.addTreeExpansionListener( new  FExpandCollapse(tree));
в этом классе у меня и происходит удаление элементов узла при его закрытии
Но не работает так как я хочу, хочется все делать через модель,потому что так правильно,а самое главное красиво, но не выходит у меня.Посмотрите код пожалуйста и подскажите что я делаю не так, как правильно удалять из узла элеенты, при этом чтобы узел оставался узлом
Спасибо
...
Рейтинг: 0 / 0
24.07.2007, 14:47:22
    #34680293
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
автор... как правильно удалять из узла элеенты, при этом чтобы узел оставался узлом

уууу.... моя дать твоей ссылка на жабадок
твоя не читать жабадок ?
и тута ещё

вместе эти две ссылки перевернут твой разум ....

если мисс джул вы захотели real swingа, то мало вам не покажется ...

решается эта штука примерно так:

FExpandCollapse получает модель дерева и удаляет/вставляет узлы через модель, или хотя-бы оповещает дерево с пом модели

гут лак
...
Рейтинг: 0 / 0
24.07.2007, 18:03:44
    #34681215
swt
swt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
ДуремарИли еще проще - оставьте один фальшивый подузел в закрытом состоянии, перед открытием удаляйте его - и будет вас счастье.так и надо делать. и не заморачиваться. это очень хороший способ.
...
Рейтинг: 0 / 0
21.10.2007, 02:31:50
    #34882899
Primax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по дереву
Чтобы не создавать новую тему, напишу здесь :

node.setUserObject(new String("Мой компьютер"));

node - это объект DefaultMutableTreeNode. Так вот, отображается в дереве не "Мой компьютер", а "Мой...". В общем не помещается весь текст. Может есть какой-то метод который отвечает за длину отображаемой строки или что-то вроде этого ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по дереву / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]