如果没有触发selectchange事件,那就是jdk的bug
你用到jdk是那个版本的,jbuilder是那个版本的
jdk1.3的focus有上百个bug,我们现在做东西,改jdk的bug把头都改大了
这个问题你可以自己想办法,在每次删除节点后手工调用valueChanged

解决方案 »

  1.   

    1.获得父节点的 Path
    2.用 addSelectionPath(TreePath path)至于 valueChanged 事件 正如 fightboy(樱桃小蚊子) 所说的,你得自己调用了
      

  2.   

    telenths(非法操作) :获得父结点的Path该怎么办?
    DefaultMutableTreeNode对象的getPath()方法返回的时TreeNode[],而JTree的addSelectionPath(TreePath path)方法参数是TreePath类型,参数类型不匹配啊?
      

  3.   

    用DefaultMutableTreeNode的
    public Object[] getUserObjectPath()
    然后new TreePath(Object[])
    得到treepath
      

  4.   

    用DefaultMutableTreeNode的
    public Object[] getUserObjectPath()
    然后new TreePath(Object[])
    得到treepath
      

  5.   

    用DefaultMutableTreeNode的
    public Object[] getUserObjectPath()
    然后new TreePath(Object[])
    得到treepath
      

  6.   

    感谢二位,可还是不行,没有任何反应
    我的代码如下://删除结点,selparent是父结点对象
    Object[] po = selparent.getUserObjectPath();
    TreePath pth = new TreePath(po);
    jTreeScoreTb.addSelectionPath(pth);
    treeModel.reload();
      

  7.   

    用setSelectionPath
    public void setSelectionPath(TreePath path)
    如何?
      

  8.   

    setSelectionPath(TreePath path)
    我也试过的,一样没反应,是不是reload()的问题?
      

  9.   

    代码:
    DefaultMutableTreeNode selparent = (DefaultMutableTreeNode)selnd.getParent();
    selparent.remove(selnd);
    treeModel.reload();
    //选中父结点
    Object[] po = selparent.getUserObjectPath();
    TreePath pth = new TreePath(po);
    Object[] po = selparent.getUserObjectPath();
    TreePath pth = new TreePath(po);
    jTreeScoreTb.addSelectionPath(pth);   //jTreeScoreTb.setSelectionPath(pth);换过来也没反应
    treeModel.reload();
      

  10.   

    罪魁祸首就是
    selparent.remove(selnd);
    使用了这一条之后必须使用
    treeModel.reload();
    来刷新整个树
    而这样selection和expand状态就完全改变了。请参考下边的例子:
    使用
    _model.removeNodeFromParent(node);
    来删除一个节点:import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import java.awt.*;
    import java.awt.event.*;public class Test extends JFrame {
        JTree _tree = new JTree();
        DefaultTreeModel _model = (DefaultTreeModel)_tree.getModel();
        TreeSelectionModel _selectionModel = _tree.getSelectionModel();
        JButton _removeButton = new JButton("Remove selected node");    public Test()
        {
            Container contentPane = getContentPane();
            _selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);        contentPane.add(new ControlPanel(), BorderLayout.NORTH);
            contentPane.add(_tree, BorderLayout.CENTER);        _tree.addTreeSelectionListener(new TreeSelectionListener(){            public void valueChanged(TreeSelectionEvent e)
                {
                    TreePath path = e.getNewLeadSelectionPath();
                    boolean nodesAreSelected = (path != null);
                    _removeButton.setEnabled(nodesAreSelected);
                }
            });
        }
        class ControlPanel extends JPanel
        {
            public ControlPanel()
            {
                _removeButton.setEnabled(false);
                add(_removeButton);
                _removeButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        TreePath path = 
                                 _selectionModel.getSelectionPath();                    if(path.getPathCount() == 1) {
                            JOptionPane.showMessageDialog(ControlPanel.this,
                                            "Can't remove root node!");
                            return;
                        }                    MutableTreeNode node = 
                         (MutableTreeNode)path.getLastPathComponent();
                        
                        TreePath parentPath = path.getParentPath();                    _model.removeNodeFromParent(node);                    _tree.setSelectionPath(parentPath);
                    }
                });
            }
        }
        public static void main(String args[]) {
            GraphicJavaApplication.launch(new Test(), 
                        "_tree Model Example",300,300,450,300);
        }
    }
    class GraphicJavaApplication extends WindowAdapter
    {
        public static void launch(final JFrame f, String title,
                                  final int x, final int y, 
                                  final int w, int h)
        {
            f.setTitle(title);
            f.setBounds(x,y,w,h);
            f.setVisible(true);
            f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            f.addWindowListener(new WindowAdapter()
            {
                public void windowClosed(WindowEvent e)
                {
                    System.exit(0);
                }
            });
        }
    }
      

  11.   

    fightboy(樱桃小蚊子) 
    十分感谢!
    马上给分