Java tutorial
import java.awt.BorderLayout; import java.awt.Button; import java.awt.Container; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; public class Main extends JPanel { JTree menuTree; JPanel buttonPanel; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); new Main().initContainer(frame); frame.pack(); frame.setVisible(true); } void initContainer(Container container) { container.setLayout(new GridLayout(1, 0)); buttonPanel = new JPanel(new GridLayout(0, 1)); Object[] menuNames = { "ROOT", new Object[] { "A", new Object[] { "CSS", "HTML", "SQL", "Java" }, "Code", new Object[] { "Test", "S", "C" } }, new Object[] { "Code 1", new Object[] { "A", "I", "H", "O" }, "Code", new Object[] { "P", "S", "C" }, "C" } }; DefaultMutableTreeNode currentNode = processHierarchy(menuNames); menuTree = new JTree(currentNode); menuTree.setVisibleRowCount(10); menuTree.expandRow(2); initializeButtons(currentNode); container.add(buttonPanel, BorderLayout.WEST); container.add(new JScrollPane(menuTree), BorderLayout.EAST); menuTree.addTreeSelectionListener(e -> { initializeButtons((DefaultMutableTreeNode) menuTree.getLastSelectedPathComponent()); }); } private DefaultMutableTreeNode processHierarchy(Object[] hierarchy) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(hierarchy[0]); DefaultMutableTreeNode child; for (int i = 1; i < hierarchy.length; i++) { Object nodeSpecifier = hierarchy[i]; if (nodeSpecifier instanceof Object[]) { child = processHierarchy((Object[]) nodeSpecifier); } else { child = new DefaultMutableTreeNode(nodeSpecifier); } node.add(child); } return (node); } private void initializeButtons(DefaultMutableTreeNode node) { Button b; buttonPanel.removeAll(); for (int i = 0; i < node.getChildCount(); i++) { b = new Button(); b.setLabel("" + node.getChildAt(i)); buttonPanel.add(b); buttonPanel.revalidate(); } } }