/*********************************************/
/* Prof. Dr. Carsten Vogt                    */
/* FH Koeln, Fak. 07 / Nachrichtentechnik    */
/* http://www.nt.fh-koeln.de/vogt            */
/*                                           */
/* Das Programm demonstriert Pulldown-Menus. */
/*********************************************/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MenuFrame extends JFrame {

  // Container und Felder zur Textausgabe:

  Container cp = getContentPane();

  JTextField textAktion = new JTextField(),
             textCheckBox = new JTextField(),
             textRadio = new JTextField();

  // Menubar, Einzelmenus:

  JMenuBar mbar;

  JMenu menu1, menu2;

  // Einzelkomponenten der Menus:
  //   Einfache Items, Checkbox Items, Radio Buttons

  JMenuItem menuSimpleItem1A, menuSimpleItem1B, menuSimpleItemQ;

  JCheckBoxMenuItem menuCbItem2A, menuCbItem2B;

  JRadioButtonMenuItem menuRadItem[] = new JRadioButtonMenuItem[3];

  // zur Gruppierung der Radio Buttons:
 
  ButtonGroup radioGroup;

  // Listener:

  SimpleMenuListener simpleLis; // fuer Events bei einfachen Menu Items
  CheckBoxListener checkLis;    // fuer Events bei Checkboxen
  RadioListener radioLis;       // fuer Events bei Radiobuttons

  // Konstruktor:

  MenuFrame(String s) {

   // Fensterrahmen erzeugen:

   super(s); 

   setLocation(20,20);

   // Layout setzen und Ausgabefelder einfuegen:

   cp.setLayout(new GridLayout(6,1));

   JLabel lab = new JLabel("Aktion:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   cp.add(lab);

   textAktion.setFont(new Font("Arial",Font.BOLD,22));
   textAktion.setForeground(Color.black);
   cp.add(textAktion);

   lab = new JLabel("Checkbox:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   cp.add(lab);

   textCheckBox.setFont(new Font("Arial",Font.BOLD,22));
   textCheckBox.setForeground(Color.black);
   cp.add(textCheckBox);

   lab = new JLabel("Radiobutton:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   cp.add(lab);

   textRadio.setFont(new Font("Arial",Font.BOLD,22));
   textRadio.setForeground(Color.black);
   cp.add(textRadio);

   // MenuBar zur Aufnahme der Einzel-Menus erzeugen:

   mbar = new JMenuBar();

   // Einzel-Menus erzeugen und zur MenuBar hinzufuegen:

   menu1 = new JMenu("Menu 1");
   menu1.setFont(new Font("Arial",Font.BOLD,22));
   menu1.setForeground(Color.black);
   mbar.add(menu1);

   menu2 = new JMenu("Menu 2");
   menu2.setFont(new Font("Arial",Font.BOLD,22));
   menu2.setForeground(Color.black);
   mbar.add(menu2);

   // ActionListener zur Ausfuehrung von Aktionen erzeugen:

   simpleLis = new SimpleMenuListener();
   checkLis = new CheckBoxListener();
   radioLis = new RadioListener();

   // Menu-Items erzeugen, ActionListener anbinden
   // und Items zu den Menus hinzufuegen:
   // Menu 1 mit einfachen Items

   menuSimpleItem1A = new JMenuItem("Aktion 1 A");
   menuSimpleItem1A.setFont(new Font("Arial",Font.BOLD,22));
   menuSimpleItem1A.setForeground(Color.black);
   menuSimpleItem1A.addActionListener(simpleLis);
   menu1.add(menuSimpleItem1A);

   menuSimpleItem1B = new JMenuItem("Aktion 1 B");
   menuSimpleItem1B.setFont(new Font("Arial",Font.BOLD,22));
   menuSimpleItem1B.setForeground(Color.black);
   menuSimpleItem1B.addActionListener(simpleLis);
   menu1.add(menuSimpleItem1B);

   menuSimpleItemQ = new JMenuItem("Quit");
   menuSimpleItemQ.setFont(new Font("Arial",Font.BOLD,22));
   menuSimpleItemQ.setForeground(Color.black);
   menuSimpleItemQ.addActionListener(simpleLis);
   menu1.add(menuSimpleItemQ);

   // Menu 2 mit Checkboxes, Trennstrich und Radio Buttons:

   menuCbItem2A = new JCheckBoxMenuItem("Check 2 A");
   menuCbItem2A.setFont(new Font("Arial",Font.BOLD,22));
   menuCbItem2A.setForeground(Color.black);
   menuCbItem2A.addItemListener(checkLis);
   menu2.add(menuCbItem2A);

   menuCbItem2B = new JCheckBoxMenuItem("Check 2 B");
   menuCbItem2B.addItemListener(checkLis);
   menuCbItem2B.setFont(new Font("Arial",Font.BOLD,22));
   menuCbItem2B.setForeground(Color.black);
   menu2.add(menuCbItem2B);

   menu2.add(new JSeparator());

   menuRadItem[0] = new JRadioButtonMenuItem("Radio 1",true); // vorausgewaehlt
   menuRadItem[1] = new JRadioButtonMenuItem("Radio 2");
   menuRadItem[2] = new JRadioButtonMenuItem("Radio 3");
   radioGroup = new ButtonGroup();
   for (int i=0;i<3;i++) {
    menuRadItem[i].setFont(new Font("Arial",Font.BOLD,22));
    menuRadItem[i].setForeground(Color.black);
    radioGroup.add(menuRadItem[i]);
    menuRadItem[i].addItemListener(radioLis);
    menu2.add(menuRadItem[i]); }

   // Menubar zum Frame hinzufuegen, Komponenten anordnen und sichtbar machen:

   setJMenuBar(mbar);
   setLocation(100,100);
   pack();
   setVisible(true);

  }

  // SimpleMenuListener: Aktionen bei Auswahl eines einfachen Menu-Punkts

  class SimpleMenuListener implements ActionListener {
   public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Quit"))
      System.exit(1);
     else textAktion.setText(e.getActionCommand());
   }
  }

  // CheckBoxListener: Aktionen bei Markierung einer Checkbox

  class CheckBoxListener implements ItemListener {
   public void itemStateChanged(ItemEvent e) {
    StringBuffer stb = new StringBuffer("");
    if (menuCbItem2A.isSelected())
     stb.append("2A ");
    if (menuCbItem2B.isSelected())
     stb.append("2B");
    textCheckBox.setText(stb.toString());
   }
  }

  // RadioListener: Aktionen bei Markierung eines Radio Buttons

  class RadioListener implements ItemListener {
   public void itemStateChanged(ItemEvent e) {
    if (menuRadItem[0].isSelected())
     textRadio.setText("1");
    if (menuRadItem[1].isSelected())
     textRadio.setText("2");
    if (menuRadItem[2].isSelected())
     textRadio.setText("3");
   }
  }

}

// Hauptprogramm

public class Menus {

 public static void main(String args[]) {

  new MenuFrame("Menus");
 
 }

}

