help with JTree and JTabbedPane

Posted on 2006-04-25
Last Modified: 2009-07-29

Hello there,

I have a Jtree which gets populated from the database.on the right side i have 3 JTabbedPane which contains JTable inside it.the table also gets populated from the DB.Nowwhen i click on the nodes,the tabpane do not change,i have attached my code which does most of the bits,so experts can tell me what i am missing or doing wrong
for example.

JTree                         JTabbedPane
-xxx                           xxx     yyy    zzz

public class Policy extends JInternalFrame implements ActionListener, TreeSelectionListener
      Frame JFParentFrame;
      Dimension screen =       Toolkit.getDefaultToolkit().getScreenSize();
      //private DynamicTree treePanel;
      //private static final String SWITCH = "Switch";
      private JScrollPane treeScroll;
    private DefaultMutableTreeNode dbNode;      // Root node for the database tree
    private DefaultTreeModel dbTreeModel;
    DefaultMutableTreeNode tableNode,tableNode1,tableNode2;
    private JTree dbTree;
    private JPanel pN;
    private CardLayout layoutMgr;
    //private JSplitPane split;
    JPanel cityPanel;
    JPanel coPanel;
    JPanel dslamPanel;
    JPanel linecardPanel;
    Connection conn;
    Statement state;
    Statement state1;
    Statement state2;
    Statement state3;
    String tableName;
    class TreeListener implements TreeSelectionListener
        public void valueChanged(TreeSelectionEvent tse)
    private void handleTreeSelection()
        Object node = dbTree.getLastSelectedPathComponent();
        if (node == null || !(node instanceof TreeNode) || node.toString() == null)
        System.out.print(node.toString());, node.toString());
      public Policy(JFrame getParentFrame)
            cityPanel = new JPanel();
            coPanel = new JPanel();
            dslamPanel = new JPanel();
            linecardPanel = new JPanel();
            JFParentFrame = getParentFrame;
            //treePanel = new DynamicTree();
            String[] switchTabs = { "City", "Co", "DSLAM", "Line Card" };
        JPanel[] switchPanels = { cityPanel, coPanel, dslamPanel, linecardPanel};
        JTabbedPane switchPane = createNodePane(switchTabs, switchPanels);
            //Container c = this.getContentPane();
            //c.add( treePanel, BorderLayout.WEST );
            layoutMgr = new CardLayout();
            pN = new JPanel(layoutMgr);
            pN.setPreferredSize(new Dimension(200, 200));
            pN.add(switchPane, "tableName");
            dbNode = new DefaultMutableTreeNode("No database");
        dbTreeModel = new DefaultTreeModel(dbNode);
        dbTree = new JTree(dbTreeModel);
        dbTree.addTreeSelectionListener(new TreeListener());
        treeScroll = new JScrollPane(dbTree);
            //Add the scroll panes to a split pane.
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT );
        splitPane.setLeftComponent( treeScroll);

            Dimension minimumSize = new Dimension(100, 50);
            //pN.setMinimumSize(new Dimension(0, 0));
        //treeView.setPreferredSize(new Dimension(100, 100));
        splitPane.setPreferredSize(new Dimension(200, 300));
        String query = "select * from city ORDER BY CITY_ID";
        JDBCAdapter dt = new JDBCAdapter(url, driver, userid, pass);

        // Create the table
        JTable tableView = new JTable(dt);

        JScrollPane scrollpane = new JScrollPane(tableView);
        scrollpane.setPreferredSize(new Dimension(500, 300));
        //c.add( splitPane, BorderLayout.WEST );
            setLocation((screen.width - 747)/2,((screen.height-450)/2)-45);
            setFrameIcon(new ImageIcon("images/customer.png"));      
Question by:zolf
    LVL 92

    Accepted Solution

    you need to make the tabbed pane a member variable and change the selected tab in your listener.

    Author Comment


    hi objects,

    could you please explain in more details or help me modify my code above to make it work.
    LVL 30

    Assisted Solution

    >> JTabbedPane switchPane = createNodePane(switchTabs, switchPanels);

    Should not be declared inside the method. You should declare it as a member of a class along with JFParentFrame.

    Author Comment


    what should i do now.

    the method createNodePane(switchTabs, switchPanels) is defined in the same class Policy

    private static JTabbedPane createNodePane(String[] tabs, Component[] items)
            // assume that tabs and items have the same
            // length and contain no null values
            JTabbedPane tp = new JTabbedPane();
            tp.setPreferredSize(new Dimension(200, 200));
            for (int i = 0; i < tabs.length; i++)
                tp.addTab(tabs[i], items[i]);
            return tp;

    Author Comment


    Thanks mate, made that thing to work.can you'll suggest me how can i change the tabs based on the nodes.i mean if i click on the yyy

    JTree                         JTabbedPane
    -xxx                           xxx     yyy    zzz

    yyy node the yyy tab should be shown,then again if i click the xxx node the tab should go back to the xxx tab.same thing goes for the zzz nodes.
    LVL 92

    Expert Comment

    you need to keep something like a map of node text -> tab component
    and use the setSelectedComponent method

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    What Security Threats Are You Missing?

    Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

    Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
    Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
    Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
    Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

    737 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    20 Experts available now in Live!

    Get 1:1 Help Now