Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jTree & Update database 
:(
    Опции темы
skif18
Дата 13.1.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 1



Есть дерево с моделью данных из базы данных.
Код

     DefaultTreeModel treeModel = new DefaultTreeModel(root);
     jTree= new JXTree(treeModel);

отображается все нормально.
Вопрос : При редактировании, есть ли возможность после закрытия редактирования
Код

 jTree.getCellEditor().stopCellEditing();

делать обновление данных в самой базе данных? Аналог firetablechanged но для дерева? Как народ вообще это организует?

Вот весь текст формирования дерева. Может слегка корявый...
Код

    private JTree getJTree() {
        final JPopupMenu popup;
        JMenuItem mi;
        MouseAdapter ma;
        if (jTree == null) {
            Connection con = null;
              Statement st = null;
              ResultSet rs = null;
            String driver = "org.postgresql.Driver";
            String url = "jdbc:postgresql://localhost:5432/";
            String db = "test";
            try {
                Class.forName(driver);
                 con = DriverManager.getConnection(url + db, "postgres", "syrus");
            } catch (ClassNotFoundException e1) {
                // TODO Автоматически созданный блок catch
                e1.printStackTrace();
            } catch (SQLException e) {
                // TODO Автоматически созданный блок catch
                e.printStackTrace();
            }
            String CurIdFolder=null;
            parent = new DefaultMutableTreeNode("Подразделения");
//            root = parent;
            try {
//              String sql = " SELECT * FROM treepodr Where isfolder=1;";
              st = con.createStatement();
              rs=st.executeQuery(" SELECT * FROM treepodr;");

           createChild(st.executeQuery(" SELECT * FROM treepodr;"),
                 null, 1);
           DefaultTreeModel treeModel = new DefaultTreeModel(root);

           jTree= new JXTree(treeModel);
            } catch (Exception e) {
                  System.out.println(e);
                }  

            jTree.setEditable(true);
            jTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
            
           final TreePath m_clickedPath = null;
            popup = new JPopupMenu();
            Action action = new AbstractAction() 
            { 
              public void actionPerformed(ActionEvent e)
              {
                if (m_clickedPath==null)
                  return;
                if (jTree.isExpanded(m_clickedPath))
                  jTree.collapsePath(m_clickedPath);
                else
                  jTree.expandPath(m_clickedPath);
              }
            };
            popup.add(action);
            popup.addSeparator();

            Action a1 = new AbstractAction("New Node ") 
            { 
              public void actionPerformed(ActionEvent e)
              {
                                    
                JOptionPane.showMessageDialog( jTree, "New Node"+jTree.getStringAt(m_clickedPath),
                  "Info", JOptionPane.INFORMATION_MESSAGE);
              }
            };
            popup.add(a1);

            Action a2 = new AbstractAction("New Folder") 
            { 
              public void actionPerformed(ActionEvent e)
              {
               String str=jTree.getStringAt(m_clickedPath).toString().trim();
               System.out.println(str);
/*               for (int i = 1; i <= str.length(); i++) {
                   if (str.charAt(i) == '!') {
                       String code = str.substring(0, i).trim();
                       String name = str.substring(i+1,str.length()).trim();
                       System.out.println(code);
                       System.out.println(name);  
                       
                   }
               }
*/               
//                JOptionPane.showMessageDialog(jTree, 
//                  "Change node-"+jTree.getLastSelectedPathComponent(),"Information", JOptionPane.INFORMATION_MESSAGE);
                
              }
            };
            popup.add(a2);
            
            
            if(jTree.isEditable()==true){
                JTextField textField = new JTextField();
                TreeCellEditor editor = new DefaultCellEditor(textField);
                jTree.setCellEditor(editor);
               textField.addKeyListener(new java.awt.event.KeyListener() {

                    public void keyPressed(KeyEvent arg0) {
                        // TODO Автоматически созданная заглушка метода
                        
                    }

                    public void keyReleased(KeyEvent arg0) {
                        // TODO Автоматически созданная заглушка метода
                        System.out.println("Editing"+arg0.getKeyCode());
                        if (arg0.getKeyCode()==KeyEvent.VK_DOWN) {
                            System.out.println("stopEditing");
                            jTree.getCellEditor().stopCellEditing();
                            SwingUtilities.updateComponentTreeUI(jTree);
                            
                        }
                        
                        
                    }

                    public void keyTyped(KeyEvent arg0) {
                        // TODO Автоматически созданная заглушка метода
                        
                    }
                 
                 
                });
                
           
            }
          

          jTree.addMouseListener(new MouseAdapter() {
              public void mouseClicked(MouseEvent em) {
               if(em.getButton() == em.BUTTON3){
                 
                int selRow = jTree.getRowForLocation(em.getX(), em.getY());      
               x =em.getX();
                  y =em.getY();
                  if(selRow != -1) {
                   TreePath path =jTree.getPathForLocation(em.getX(), em.getY());
                   jTree.setSelectionPath(path);
                   popup.show((JXTree)em.getSource(), x, y);
//                   System.out.println("x="+x);
 //                  System.out.println("y="+y);
//                   System.out.println("path="+path);
                  }
            
               }
              }
            });
          
         
        }
        return jTree;
    }

    
  
    
    
     private void createChild(ResultSet r, DefaultMutableTreeNode p,
                             int l) throws Exception {
        DefaultMutableTreeNode parent = p;
        DefaultMutableTreeNode current = null;
        int level = l;
//        System.out.println("----" + r.getRow());
        if (p == null) {
            parent = new DefaultMutableTreeNode("Предприятие");
            root = parent;

            r.next();

            createChild(r, parent, r.getInt("level1"));
        }
        while (!r.isAfterLast()) {
            if (level < r.getInt("level1")) {
                createChild(r, current, r.getInt("level1"));
            } else if (level == r.getInt("level1")) {
                current = new DefaultMutableTreeNode(r.getString("id").trim()+" ! "+r.getString("descr").trim());
                parent.add(current);
                r.next();
            } else {
                return;
            }

        }
    }


Это сообщение отредактировал(а) skif18 - 13.1.2011, 12:53


--------------------

PM MAIL ICQ   Вверх
mgarin
Дата 13.1.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 3



Вот 2 варианта прослушивания редактирования элементов в дереве (вероятно, можно извратиться и по другому):
Код
        JTree tree = new JTree ();
        tree.setEditable ( true );

        DefaultCellEditor dtce = new DefaultCellEditor( new JTextField () )
        {
            public boolean stopCellEditing ()
            {
                boolean b = super.stopCellEditing ();
                System.out.println ( "Inner: Editing done" );
                return b;
            }

            public void cancelCellEditing ()
            {
                super.cancelCellEditing ();
                System.out.println ( "Inner: Editing cancelled" );
            }
        };
        dtce.addCellEditorListener ( new CellEditorListener()
        {
            public void editingStopped ( ChangeEvent e )
            {
                System.out.println ( "Listener: Editing done" );
            }

            public void editingCanceled ( ChangeEvent e )
            {
                System.out.println ( "Listener: Editing cancelled" );
            }
        } );
        tree.setCellEditor ( dtce );

А далее уже как надо так и обрабатывайте измененные данные
Хоть в базу, хоть откатывать изменения либо еще что...

Это сообщение отредактировал(а) mgarin - 13.1.2011, 16:58
PM MAIL WWW ICQ   Вверх
skif18
Дата 19.1.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 1



Код

jTree.getModel().addTreeModelListener(new TreeModelListener(){

                public void treeNodesChanged(TreeModelEvent tme) {
//  здесь уже сам код  ав моем случае Update в базу

}
});


Но можно ли сделать обновлениев базе не запросом, а чтоб автоматичемки как в таблице обновляло данные в базе данных?


--------------------

PM MAIL ICQ   Вверх
jk1
Дата 19.1.2011, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

Но можно ли сделать обновлениев базе не запросом, а чтоб автоматичемки как в таблице обновляло данные в базе данных? 


Только средствами ORM, например Hibernate. В этом случае Вы мапите некую коллекцию сущностей, которая служит дереву моделью на таблицу(ы) в базе данных.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
mgarin
Дата 20.1.2011, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 3



Цитата(skif18 @  19.1.2011,  13:25 Найти цитируемый пост)
Но можно ли сделать обновлениев базе не запросом, а чтоб автоматичемки как в таблице обновляло данные в базе данных? 

Ну так если у Вас уже сделано для таблицы - сделайте по аналогии для дерева...
У обоих есть модель, из которых они берут данные и куда они их записывают - без нее никуда.
Сделайте аналогичную модель для дерева.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.