Search code examples
javaswingjpaneljtree

Can't add JTree to JPanel of a JInternalFrame


I have two panels in my JInternalframe.I want to add Jtree to second Jpanel named topPanel. But I cant add Jtree to topPanel.Please help me. This my piece of code:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Deck");

DefaultMutableTreeNode itemClubs = new DefaultMutableTreeNode("Clubs");
addAllCard(itemClubs);
root.add(itemClubs);

DefaultMutableTreeNode itemDiamonds = new DefaultMutableTreeNode("Diamonds");
addAllCard(itemDiamonds);
root.add(itemDiamonds);

DefaultMutableTreeNode itemSpades = new DefaultMutableTreeNode("Spades");
addAllCard(itemSpades);
root.add(itemSpades);

DefaultMutableTreeNode itemHearts = new DefaultMutableTreeNode("Hearts");
addAllCard(itemHearts);
root.add(itemHearts);
DefaultTreeModel treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
scrollPane = new JScrollPane(tree);
// scrollPane.setViewportView(tree);

scrollPane.getViewport().add(tree);

topPanel.add(scrollPane, BorderLayout.CENTER);

topPanel.setVisible(true);  

tree.setVisible(true);

Solution

  • Basically, works for me, there must be something you're not showing us.

    Consider providing a runnable example which demonstrates your problem. This will result in less confusion and better responses

    TreeExample

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JInternalFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    
    public class TreeTest {
    
        public static void main(String[] args) {
            new TreeTest();
        }
    
        public TreeTest() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }
    
                    JDesktopPane desktopPane = new JDesktopPane();
                    JInternalFrame inFrame = new JInternalFrame("Tree", true, true, true, true);
                    inFrame.add(new TestPane());
                    inFrame.pack();
                    inFrame.setVisible(true);
                    desktopPane.add(inFrame);
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(desktopPane);
                    frame.setSize(200, 200);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            public TestPane() {
                setLayout(new BorderLayout());
    
                DefaultMutableTreeNode root = new DefaultMutableTreeNode("Deck");
                DefaultMutableTreeNode itemClubs = new DefaultMutableTreeNode("Clubs");
                root.add(itemClubs);
                DefaultMutableTreeNode itemDiamonds = new DefaultMutableTreeNode("Diamonds");
                root.add(itemDiamonds);
                DefaultMutableTreeNode itemSpades = new DefaultMutableTreeNode("Spades");
                root.add(itemSpades);
                DefaultMutableTreeNode itemHearts = new DefaultMutableTreeNode("Hearts");
                root.add(itemHearts);
                DefaultTreeModel treeModel = new DefaultTreeModel(root);
                JTree tree = new JTree(treeModel);
    //            tree.setRootVisible(true);
    //            tree.setShowsRootHandles(true);
    
                JPanel topPanel = new JPanel(new BorderLayout());
                topPanel.add(new JScrollPane(tree));
                add(topPanel);
            }
    
        }
    
    }