我在左边设置了一个tree,右边是table
我的想法是当用户单击树的节点时,右面切换到相应的选项卡,怎么实现啊????
最好附上源码ps:我试了很多种方法都不行,我的想法是:当用户单击节点时,取得被单击的节点名(toString方法).然后,用setEnabledAt方法显示具有相同名称的选项卡
    可是不行啊!!!!!!!!!

解决方案 »

  1.   

    要用这两个方法来设置JTabbedPane选择的页面。
     void  setSelectedComponent(Component c)
              设置此选项卡窗格的已选组件。
     void  setSelectedIndex(int index) 
              设置所选择的此选项卡窗格的索引。
    而不是用setEnabledAt
      

  2.   

    public class Test extends JFrame{ private JTree tree = null;

    private JTabbedPane pane = null;

    public Test(){
    DefTreeNode root = new DefTreeNode("Test", 0);
    tree = new JTree(root);
    tree.setRootVisible(true);

    root.add(new DefTreeNode("Test1",1));
    root.add(new DefTreeNode("Test2",2));

    tree.addTreeSelectionListener(new TreeSelectionListener(){
    public void valueChanged(TreeSelectionEvent e) {
    DefTreeNode node = (DefTreeNode) tree.getSelectionPath().getLastPathComponent();
    int index = node.getIndex();

    pane.setSelectedIndex(index);//要做判断
    }
    });

    this.getContentPane().add(tree,BorderLayout.WEST);

    pane = new JTabbedPane();
    pane.add("Root", new JPanel());
    pane.add("Test1", new JPanel());
    pane.add("Test2", new JPanel());

    this.getContentPane().add(pane);
    }

    private class DefTreeNode extends DefaultMutableTreeNode{
    private int index = 0;;

    protected DefTreeNode(Object userObject, int index) {
    super(userObject);
    this.index = index;
    }

    public int getIndex(){
    return index;
    }
    }

    public static void main(String[] args){
    Test t = new Test();
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setSize(new Dimension(100,100));

    t.setVisible(true);
    }
    }
    简单实现,使用TreeSelection监听的问题是,只有当Tree节点选中发生变化时才通知。当选中右边的选项卡选择发生变化,在左边树点击当前节点,不会跳转。 建议修改监听类型(比如MouseListener)