JScrollPane的滚动条不会随着jtree所选择的节点的变化而滚动。也就是说当我用上下键移动jtree所选择的节点时,节点的滚动并没有带动panel的滚动条的滚动。有时所选择的焦点会到panel不显示的的里面去了.而不会像正常的树那样:如果当前显示的所选择焦点时panel 的最后一个时,当我们再按向下键时,滚动条也会向下移动.(好像java已经实现了这个功能,但不知道我的为什么乱了)JScrollPane scrpItemListTree = new JScrollPane(treeItemList);
是不是要对tree 和 panel 设置一些什么属性.由于项目的其他要求,我是在另外的一个面板上加上了keyListener来处理上下键的.如果是向上键
tree.setSelectionRow(--selectionRow);//selectionRow 为当前选择的节点.我是通过上面的代码来控制节点的移动的.这样的话是不是没有激发tree相应的keylistener.谢谢!
是不是要对tree 和 panel 设置一些什么属性.由于项目的其他要求,我是在另外的一个面板上加上了keyListener来处理上下键的.如果是向上键
tree.setSelectionRow(--selectionRow);//selectionRow 为当前选择的节点.我是通过上面的代码来控制节点的移动的.这样的话是不是没有激发tree相应的keylistener.谢谢!
/**
* ツリーのイニシャライズ
*/
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);
}
}
}
});
}
* 選択ノードの変更の処理
* @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();
}
jScrollTree.setBorder(null);
jScrollTree.getViewport().add(jTree);
jPanelContent.add(jScrollTree, BorderLayout.CENTER);
这里是设滚动条的.整个代码关于滚动条的,就这四行代码.
也可以用setViewportView方法.
jScrollTree.getViewport().add(jTree);不放进去了吗
应该没有问题的,我的项目这个功能做好很久了.
tree.scrollRowToVisible(selectionRow); //***//