• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 811
  • Last Modified:

help with JTree and JTabbedPane

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)
        layoutMgr.show(pN, 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"));      
  • 3
  • 2
2 Solutions
you need to make the tabbed pane a member variable and change the selected tab in your listener.

zolfAuthor Commented:

hi objects,

could you please explain in more details or help me modify my code above to make it work.
Mayank SAssociate Director - Product EngineeringCommented:
>> 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.
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

zolfAuthor Commented:

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;
zolfAuthor Commented:

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.
you need to keep something like a map of node text -> tab component
and use the setSelectedComponent method
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now