Di artikel Mengenal Kelas JMenuBar Di Pemrograman Java, Kelas JMenu Dan Contoh Penggunaannya Di Pemrograman Java, Kelas JMenuItem Dan Contoh Penggunaannya Di Pemrograman Java, Kelas JRadioButtonMenuItem Dan Contoh Penggunaannya Di Java, Kelas JCheckBoxMenuItem Dan Contoh Penggunaannya Di Java dan Menggunakan Ikon, Mnemonic Dan Accelerator Di Menu Aplikasi Java, Anda dapat mempelajari bagaimana membuat tipe menu berbeda di pemrograman Java. Di artikel kali ini, Anda diberikan contoh program bagaimana menggunakan menu-menu dalam program aplikasi Java sederhana.

Program aplikasi sederhana tersebut berkaitan dengan pemformatan teks. Anda dapat merubah warna teks dan latar belakang, memilih jenis dan model huruf serta merubah teks yang ditampilkan. Di program ini, juga memperkenalkan kombinasi penanganan event menggunakan inner class (baca artikel Inner Class Sebagai Obyek Pendengar Aksi (Event Listener Object)) serta anonymous inner class (baca artikel Anonymous Inner Class Sebagai Obyek Pendengar Event) sebagai listener. Berikut ini adalah kode program dan hasil eksekusinya:

// Nama file : TextApplication.java
// Membuat program aplikasi teks sederhana.

// Mengimpor kelas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// Deklarasi kelas
public class TextApplication extends JFrame {

   private JLabel label;
   private int style;
   private JCheckBoxMenuItem fontStyle[];
   private JRadioButtonMenuItem fontFace[], foregroundColor[], 
              backgroundColor[];
   private Color backgroundColorValue[] = {Color.YELLOW, Color.WHITE,
              Color.CYAN};
   private Color foregroundColorValue[] = {Color.BLACK, Color.BLUE,
              Color.RED};
   private ButtonGroup groupFontFace, groupForegroundColor,
              groupBackgroundColor; 

   // Konstruktor tanpa argumen
   public TextApplication() {
      label = new JLabel("Pemrograman Java", SwingConstants.CENTER);
      label.setForeground(Color.BLACK);
      label.setFont(new Font("Tahoma", Font.PLAIN, 32));
      getContentPane().setBackground(Color.YELLOW);
      getContentPane().add(label, BorderLayout.CENTER);

      JMenuBar mnuBar = new JMenuBar();
      setJMenuBar(mnuBar);

      JMenu mnuFile = new JMenu("File");
      mnuFile.setMnemonic('F');
      mnuBar.add(mnuFile);

      JMenu mnuFormat = new JMenu("Format");
      mnuFormat.setMnemonic('o');
      mnuBar.add(mnuFormat);

      JMenu mnuHelp = new JMenu("Help");
      mnuHelp.setMnemonic('H');
      mnuBar.add(mnuHelp);

      JMenuItem mnuiNewText = new JMenuItem("New Text");
      mnuiNewText.setMnemonic('T');
      mnuiNewText.setAccelerator(KeyStroke.getKeyStroke
         (KeyEvent.VK_T, ActionEvent.CTRL_MASK));
      mnuFile.add(mnuiNewText);
      mnuiNewText.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               String newText = JOptionPane.showInputDialog(TextApplication.this,
                                         "Enter a new text", "New Text Dialog Box",
                                        JOptionPane.PLAIN_MESSAGE);
               label.setText((newText == null) ? label.getText() : newText);
            }
         }
      );

      JMenuItem mnuiExit = new JMenuItem("Exit");
      mnuiExit.setMnemonic('E');
      mnuiExit.setAccelerator(KeyStroke.getKeyStroke
         (KeyEvent.VK_E, ActionEvent.CTRL_MASK));
      mnuFile.add(mnuiExit);
      mnuiExit.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               System.exit(0);
            }
         }
      );

      JMenuItem mnuiAbout = new JMenuItem("About");
      mnuiAbout.setMnemonic('A');
      mnuiAbout.setAccelerator(KeyStroke.getKeyStroke
         (KeyEvent.VK_A, ActionEvent.CTRL_MASK));
      mnuHelp.add(mnuiAbout);
      mnuiAbout.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               JOptionPane.showMessageDialog(TextApplication.this, 
                  "This simple application is about manipulating text.",
                  "About", JOptionPane.PLAIN_MESSAGE);
            }
         }
      );

      // Font face menu item
      RadioButtonHandler radioButtonHandler = new RadioButtonHandler();
      JMenu mnuFontFace = new JMenu("Font Face");
      mnuFontFace.setMnemonic('c');
      mnuFormat.add(mnuFontFace);

      groupFontFace = new ButtonGroup();
      String fontFaceValue[] = {"Monospaced", "SansSerif", "Tahoma", "Verdana"}; 
      fontFace = new JRadioButtonMenuItem[fontFaceValue.length];
      for (int x = 0; x < fontFace.length; x++) {
         fontFace[x] = new JRadioButtonMenuItem(fontFaceValue[x]);
         mnuFontFace.add(fontFace[x]);
         groupFontFace.add(fontFace[x]);
         fontFace[x].addActionListener(radioButtonHandler);
     }

     fontFace[2].setSelected(true);

     // Font style menu item
     CheckBoxHandler checkBoxHandler = new CheckBoxHandler();
     JMenu mnuFontStyle = new JMenu("Font Style");
     mnuFontStyle.setMnemonic('S');
     mnuFormat.add(mnuFontStyle);
 
     String  fontStyleValue[] = {"Bold", "Italic"};
     fontStyle = new JCheckBoxMenuItem[fontStyleValue.length];
     for (int x = 0; x < fontStyle.length; x++) {
        fontStyle[x] = new JCheckBoxMenuItem(fontStyleValue[x]);
        mnuFontStyle.add(fontStyle[x]);
        fontStyle[x].addItemListener(checkBoxHandler);
     }

     mnuFormat.addSeparator();

     // Foreground color menu item
     JMenu mnuForegroundColor = new JMenu("Foreground Color");
     mnuForegroundColor.setMnemonic('g');
     mnuFormat.add(mnuForegroundColor);

     groupForegroundColor = new ButtonGroup();
     String foregroundColorName[] = {"Black", "Blue", "Red"};
     foregroundColor = new JRadioButtonMenuItem[foregroundColorName.length];
     for (int x = 0; x < foregroundColor.length; x++) {
        foregroundColor[x] = new JRadioButtonMenuItem(foregroundColorName[x]);
        mnuForegroundColor.add(foregroundColor[x]);
        groupForegroundColor.add(foregroundColor[x]);
        foregroundColor[x].addActionListener(radioButtonHandler);
     }

     foregroundColor[0].setSelected(true);

     // Background color menu item
     JMenu mnuBackgroundColor = new JMenu("Background Color");
     mnuBackgroundColor.setMnemonic('B');
     mnuFormat.add(mnuBackgroundColor);

     groupBackgroundColor = new ButtonGroup();
     String backgroundColorName[] = {"Yellow", "White", "Cyan"};
     backgroundColor = new JRadioButtonMenuItem[backgroundColorName.length];
     for (int x = 0; x < backgroundColor.length; x++) {
        backgroundColor[x] = new JRadioButtonMenuItem(backgroundColorName[x]);
        mnuBackgroundColor.add(backgroundColor[x]);
        groupBackgroundColor.add(backgroundColor[x]);
        backgroundColor[x].addActionListener(radioButtonHandler);
     }

     backgroundColor[0].setSelected(true);
  } // Akhir blok konstruktor

  class RadioButtonHandler implements ActionListener {

     public void actionPerformed(ActionEvent ae) {

        for (int y = 0; y < fontFace.length; y++) {
           if (ae.getSource() == fontFace[y]) {
              label.setFont(new Font(fontFace[y].getText(), style, 32));
              break;
           }
        }

        for (int y = 0; y < foregroundColor.length; y++) {
           if (foregroundColor[y].isSelected()) {
              label.setForeground(foregroundColorValue[y]);
              break;
           }
        }

        for (int y = 0; y < backgroundColor.length; y++) {
           if (backgroundColor[y].isSelected()) {
              getContentPane().setBackground(backgroundColorValue[y]);
              break;
           }
        }
    
        repaint();
     }
  }

  class CheckBoxHandler implements ItemListener {

     public void itemStateChanged(ItemEvent ie) {
    
        style = 0;

        if (fontStyle[0].isSelected())
           style += Font.BOLD;

        if (fontStyle[1].isSelected())
           style += Font.ITALIC;
 
        label.setFont(new Font(label.getFont().getName(), style, 32));
        repaint();
     }
  }

  // Metoda main
  public static void main(String[] args) {
     TextApplication frame = new TextApplication();
     frame.setTitle("Kelas TextApplication");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(375, 200);
     frame.setVisible(true);
  }
}

Program aplikasi di atas memiliki hanya satu konstruktor tanpa argument yang digunakan untuk mendesain user interface dan meregistrasi beberapa item menu yang apabila dieksekusi akan memicu event. Di dalam kontruktor, tiga buah menu (File, Format dan Help) diletakkan di menu bar.

Menu file mempunyai dua item menu yaitu New Text dan Exit. Menu Format mempunyai empat buah submenu yaitu Font Face, Font Style, Foreground Color dan Background Color. Submenu Font Face mempunyai empat item menu yang mewakili jenis huruf yaitu Monospaced, SansSerif, Tahoma dan Verdana. Item menu tersebut merupakan obyek (instan) kelas JRadioButtonmenuItem. Submenu Font Style mempunyai dua obyek item menu dari kelas JCheckBoxMenuItem yaitu Bold dan Italic. Submenu Foreground Color mempunyai tiga obyek item menu dari kelas JRadioButtonMenuItem yaitu Black, Blue dan Red. Submenu Background Color juga mempunyai tiga item menu yaitu Yellow, White dan Cyan yang juga obyek (instan) dari kelas JRadioButtonMenuItem. Menu Help mempunyai satu menu item yaitu About.

Item menu New Text dan About akan menampilkan kotak dialog ketika dieksekusi. Item menu New Text akan menampilkan kotak dialog input yang digunakan untuk memasukkan teks baru yang akan ditampilkan dan item menu About menampilkan kotak dialok yang menginformasikan fungsi aplikasi. Kedua kotak dialok tersebut dihasilkan dari pemanggilan metoda static showInputDialog dan showMessageDialog dari kelas JOptionPane. Berikut ini adalah tampilan kedua kotak dialog ketika item menu New Text dan About dipilih:

   

Baca artikel terkait lainnya: