JScrollPane的滚动条不会随着jtree所选择的节点的变化而滚动。也就是说当我用上下键移动jtree所选择的节点时,节点的滚动并没有带动panel的滚动条的滚动。有时所选择的焦点会到panel不显示的的里面去了.而不会像正常的树那样:如果当前显示的所选择焦点时panel 的最后一个时,当我们再按向下键时,滚动条也会向下移动.(好像java已经实现了这个功能,但不知道我的为什么乱了)JScrollPane scrpItemListTree = new JScrollPane(treeItemList);
是不是要对tree 和 panel 设置一些什么属性.由于项目的其他要求,我是在另外的一个面板上加上了keyListener来处理上下键的.如果是向上键
tree.setSelectionRow(--selectionRow);//selectionRow 为当前选择的节点.我是通过上面的代码来控制节点的移动的.这样的话是不是没有激发tree相应的keylistener.谢谢!

解决方案 »

  1.   

    我做过你说的TREE,你看看我的代码,代码太长,给你 发几个方法,有问题,你再问我吧,MSN:[email protected],发邮件给我也可以
        /**
         * ツリーのイニシャライズ
         */
        private void initContent() throws Exception {
            Map uiTreeStyle = uiReader.getDefineDataByPart("tree");
            jPanelContent.setLayout(new BorderLayout(5, 0));
            jPanelContent.setBorder(BorderFactory.createLineBorder(new Color(127, 157, 185), 1));
            JScrollPane jScrollTree = new JScrollPane();
            jScrollTree.setBorder(null);
            jScrollTree.getViewport().add(jTree);
            jTree.setModel(new TreeModeModel(0));
            jTree.setCellRenderer(new CustomTreeCellRenderer());
            DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) jTree.getCellRenderer();
            renderer.setFont((Font) uiTreeStyle.get("font"));
            jTree.setRootVisible(false);
            jTree.setShowsRootHandles(true);        //logic.expandAll(jTree, new TreePath(jTree.getModel().getRoot()));        jTree.expandRow(0);
            jTree.setSelectionRow(0);
            jPanelContent.add(jScrollTree, BorderLayout.CENTER);        jTree.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {                String sKey = e.getKeyText(e.getKeyCode());                if (e.isControlDown() && sKey.equals("F")) {
                        SidePanel sidePanel = MainFrame.getUI().getSidePanel();
                        JPanel currentPanel = sidePanel.getComponent();
                        if (!(currentPanel instanceof SearchPanel)) {
                            sidePanel.setPanel("searchpanel");
                            MainFrame.getUI().getMainMenu().setSideModel("searchpanel");
                            MainFrame.getUI().getToolbar().setSideModel("searchpanel", true);
                        }                } else if (e.isControlDown() && sKey.equals("B")) {
                        SidePanel sidePanel = MainFrame.getUI().getSidePanel();
                        JPanel currentPanel = sidePanel.getComponent();
                        if (!(currentPanel instanceof BookPanel)) {
                            sidePanel.setPanel("bookpanel");
                            MainFrame.getUI().getMainMenu().setSideModel("bookpanel");
                            MainFrame.getUI().getToolbar().setSideModel("bookpanel", true);
                        }
                    }
                }
            });
        }
      

  2.   

    /**
         * 選択ノードの変更の処理
         * @param objId int オプジェクトID
         */
        public void changeSelected(int objId) {
            DefaultMutableTreeNode treeNode = logic.getNodeByObj(jTree, objId);        logic.collapseAll(jTree, new TreePath(jTree.getModel().getRoot()));        if (treeNode != null && objId != 0) {
                TreePath treePath = new TreePath(((DefaultTreeModel) jTree.getModel()).getPathToRoot(
                        treeNode));
                logic.expandAll(jTree, treePath);
                jTree.setSelectionPath(treePath);
            } else {
                jTree.setSelectionRow(0);
                jTree.expandRow(0);
            }
            lastObject = "" + objId;
            jTree.updateUI();
        }
      

  3.   

    JScrollPane jScrollTree = new JScrollPane();
            jScrollTree.setBorder(null);
            jScrollTree.getViewport().add(jTree);
            jPanelContent.add(jScrollTree, BorderLayout.CENTER);
    这里是设滚动条的.整个代码关于滚动条的,就这四行代码.
      

  4.   

    楼上正解.你的JTree没有放到JScrollPane的JViewPort里.
    也可以用setViewportView方法.
      

  5.   

    楼上什么意思,
    jScrollTree.getViewport().add(jTree);不放进去了吗
    应该没有问题的,我的项目这个功能做好很久了.
      

  6.   

    tree.setSelectionRow(--selectionRow);
    tree.scrollRowToVisible(selectionRow);  //***//