// imports allow you to use code already written by others.  It is good to explore and learn libraries.  The names around the dots often give you a hint to the originator of the code.
import java.util.Scanner; //library for user input
import java.lang.Math; //library for random numbers


public class Menu {
// Instance Variables
public final String DEFAULT = "\u001B[0m";  // Default Terminal Color
public final String[][] COLORS = { // 2D Array of ANSI Terminal Colors
    {"Default",DEFAULT},
    {"red", "\u001B[31m"}, 
    {"green", "\u001B[32m"}, 
    {"yellow", "\u001B[33m"}, 
    {"blue", "\u001B[34m"}, 
    {"purple", "\u001B[35m"}, 
    {"cyan", "\u001B[36m"}, 
    {"white", "\u001B[37m"}, 
};
// 2D column location for data
public final int NAME = 0;
public final int ANSI = 1;  // ANSI is the "standard" for terminal codes

// Constructor on this Object takes control of menu events and actions
public Menu() {
    Scanner sc = new Scanner(System.in);  // using Java Scanner Object
    
    this.print();  // print Menu
    boolean quit = false;
    while (!quit) {
        try {  // scan for Input
            int choice = sc.nextInt();  // using method from Java Scanner Object
            System.out.print("" + choice + ": ");
            quit = this.action(choice);  // take action
        } catch (Exception e) {
            sc.nextLine(); // error: clear buffer
            System.out.println(e + ": Not a number, try again.");
        }
    }
    sc.close();
}

// Print the menu options to Terminal
private void print() {
    //System.out.println commands below is used to present a Menu to the user. 
    System.out.println("-------------------------\n");
    System.out.println("Choose from these choices");
    System.out.println("-------------------------\n");
    System.out.println("1 - Say Hello");
    System.out.println("2 - color names");
    System.out.println("3 - aadya in different colors");
    System.out.println("0 - Quit");
    System.out.println("-------------------------\n");
}

// Private method to perform action and return true if action is to quit/exit
private boolean action(int selection) {
    boolean quit = false;

    switch (selection) {  // Switch or Switch/Case is Control Flow statement and is used to evaluate the user selection
        case 0:  
            System.out.print("bye!!");
            quit = true;
            break;
        case 1:
            System.out.print("hello!!!");
            break;
        case 2:
            for(int i = 0; i < COLORS.length; i++)  // loop through COLORS array
                System.out.print(COLORS[i][ANSI] + COLORS[i][NAME]);
            break;
        case 3:
            System.out.print("Loading...");
            for (int i = 0; i < 20; i++) {  // fixed length loading bar
                int random = (int) (Math.random() * COLORS.length);  // random logic
                try {
                    Thread.sleep(100);  // delay for loading
                } catch (Exception e) {
                    System.out.println(e);
                }
                System.out.print(COLORS[random][ANSI] + "AADYA ");
            }
            break;
                
        default:
            //Prints error message from console
            System.out.print("Unexpected choice, try again.");
    }
    System.out.println(DEFAULT);  // make sure to reset color and provide new line
    return quit;
}

// Static driver/tester method
static public void main(String[] args)  {  
    new Menu(); // starting Menu object
}

}
Menu.main(null);
-------------------------

Choose from these choices
-------------------------

1 - Say Hello
2 - color names
3 - aadya in different colors
0 - Quit
-------------------------

1: hello!!!
2: Defaultredgreenyellowbluepurplecyanwhite
3: Loading...AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA AADYA 
4: Unexpected choice, try again.
0: bye!!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;
// Graphical-User-Interface for Desktop in Java using Java Swing. 
public class MenuJFrame extends JFrame implements ActionListener {
    private JFrame frame;
    private JMenuBar menubar;
    private JMenu menu;
    private JLabel message = new JLabel("Click on Menu to select an action.");
    public final String[] MENUS = { // 1D Array of Menu Choices
        "Hello", "Colors", "Loading bar",  
    };
    // Statics to assist with timer and messaging, single copy (no instance)
    private	static int delay = 20;
    private	static int step = 1;
    private static String hashes = "";

    // Constructor enables the Frame instance, the object "this.frame"
    public MenuJFrame(String title) {
	    // Initializing Key Objects
        frame = new JFrame(title);
	    menubar = new JMenuBar();
	    menu = new JMenu("Menu");

        // Initializing Menu objects and adding actions
        for (String mx : MENUS) {
            JMenuItem m = new JMenuItem(mx);
            m.addActionListener(this);
            menu.add(m); 
        }

        // Adding / Connecting Objects
        menubar.add(menu);
        frame.setJMenuBar(menubar);
        frame.add(message);

        // Sets JFrame close operation to Class variable JFrame.EXIT_ON_CLOSE
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // set the size of window based on objects
        frame.setSize(300,200);

        // makes the frame object visible according to properties previously set
        frame.setVisible(true);  // flow of control shifts to frame object
    }

    // event from user selecting a menu option
    public void actionPerformed(ActionEvent e) {
        // local variable to ActinEvent
        String selection = e.getActionCommand();  // menu selection
        String msg; // local variable to create response from action
        final String[] COLORS = {"Red", "Green", "Blue"};  // add more colors here
 	    final String start_msg = "<html>";  // html building
       	final String end_msg = "</html>";
       	final String hash = "#";

        // run code based on the menuItem that was selected
        if ( selection.equals(MENUS[0]) ) {  // Hello Action
            msg = "Hello, World";
            message.setText(msg);
        } else if ( selection.equals(MENUS[1]) ) { // Color Action
            msg = start_msg + "<p>" + selection + "</p>";
            for (String color : COLORS) {
                msg += "<font color=" + color + ">" + color + " </font>";
            }
            msg += end_msg;
            message.setText(msg);
        } else {  // Loading Bar Action
	    String loading = "<p>Loading</p>";
            // Code to run on a Timer
            Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                public void run() {  // Method for TimerTask
                    // Static and Local variables used to manage message building
                    int random = (int) (Math.random() * COLORS.length);  // random logic
                    MenuJFrame.hashes +=  "<font color=" + COLORS[random] + ">" + hash + "</font>";
                    String msg = start_msg + loading + hashes + end_msg;
                    message.setText(msg);
                    
	  	            // Shutdown timer and reset data
                    if(MenuJFrame.step++ > MenuJFrame.delay) {
                        MenuJFrame.step = 1; MenuJFrame.hashes="";
                        timer.cancel();
                    }
                };
            };
            // Schedule task and interval
            timer.schedule(task, 200, 200);
            message.setText(start_msg + loading + hash + end_msg);  // prime/initial display
        }
    }

    // Driver turn over control the GUI
    public static void main(String[] args) {
        // Activates an instance of MenuJFrame class, which makes a JFrame object
        new MenuJFrame("Menu");
    }
}
MenuJFrame.main(null);
System.out.println("hi")
//testing if cells after the GUI menu runs succesfully after loading the menu
// executed with state Success
hi