Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

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();
        }
    }
}