Есть дерево с моделью данных из базы данных.
Код | 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; }
} }
|
|