Banner Java

Membuat Popup (Context) Menu Di Pemrograman Java

Menu alternatif yang dapat digunakan selain regular menu adalah popup menu atau context menu. Popup menu dapat ditampilkan dimana saja di area layar (screen). Proses pembuatan popup menu tidak jauh berbeda dengan penggunaan regular menu (baca artikel Contoh Program Java: Memformat Teks Menggunakan Menu) dengan pengecualian bahwa popup menu tidak memerlukan obyek menu bar (kelas JMenuBar). Untuk membuat popup menu, terlebih dahulu harus membuat obyek dari kelas JPopupMenu, kemudian menambahkan submenu dari kelas JMenu atau item menu dari kelas JMenuItem, JRadioButtonMenuItem atau JCheckBoxMenuItem ke obyek tersebut. Berikut ini adalah hirarkhi turunan kelas JPopupMenu:

Hirarkhi turunan kelas JPopupMenu

Kelas JPopupMenu merupakan kelas turunan dari kelas JComponent. JPopupMenu mempunyai dua konstruktor dan banyak metoda. Berikut ini adalah konstruktor dan metoda-metoda kelas JPopupMenu yang sering digunakan:

Konstruktor Kelas JPopupMenu
Konstruktor Keterangan
JPopupMenu() Mengkonstruksi obyek popup menu.
JPopupMenu(String label) Mengkonstruksi obyek popup menu dengan label.

Metoda Kelas JPopupMenu
Metoda Keterangan
add(JMenuItem menuItem) Menambahkan obyek item menu ke dalam popup menu.
addSeparator() Menambahkan pembatas (separator) berupa garis horisontal antar menu.
show(Component invoker, int x, int y) Menampilkan popup menu di koordinat x dan y dari komponen dimana popup menu ditampilkan.

Contoh program aplikasi berikut ini masih berkaitan dengan pemformatan teks. Anda dapat menentukan apakah suatu teks mempunyai penjajaran horisontal (horizontal alignment) kiri, tengah atau kanan, penjajaran vertikal (vertical alignment) bawah, tengah atau atas. Anda juga dapat menentukan warna teks dan warna latar belakang (foreground dan background). Semua operasi pemformatan hanya dilakukan melalui popup menu. Berikut ini adalah contoh program dan hasil eksekusinya:

// Nama file : DemoPopupMenu.java
// Pemformatan teks menggunakan popup menu

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

// Mendeklarasikan kelas
public class DemoPopupMenu extends JFrame {

   private JLabel label;
   private JPopupMenu popupMenu;
   private JRadioButtonMenuItem horAlign[], verAlign[], foreColor[], backColor[];
   private int horAlignValue[] = {SwingConstants.LEFT, SwingConstants.CENTER,
                                  SwingConstants.RIGHT};
   private int verAlignValue[] = {SwingConstants.TOP, SwingConstants.CENTER,
                                  SwingConstants.BOTTOM};
   private Color foreColorValue[] = {Color.BLACK, Color.BLUE, Color.RED};
   private Color backColorValue[] = {Color.YELLOW, Color.WHITE, Color.CYAN};
   private ButtonGroup groupHor, groupVer, groupFore, groupBack;

   // Konstruktor kelas
   public DemoPopupMenu() {
      label = new JLabel("Belajar Java", SwingConstants.CENTER);
      label.setForeground(Color.BLUE);
      label.setFont(new Font("Tahoma", Font.BOLD, 32));
      getContentPane().setBackground(Color.YELLOW);
      getContentPane().add(label, BorderLayout.CENTER);
      label.addMouseListener(
         new MouseAdapter() {
            public void mousePressed(MouseEvent me) {
               displayPopupMenu(me);
            }

            public void mouseReleased(MouseEvent me) {
               displayPopupMenu(me);
            }
         }
      );

      popupMenu = new JPopupMenu();
      RadioButtonHandler radioButtonHandler = new RadioButtonHandler();
      
      // Submenu dan item menu untuk penjajaran horisontal
      JMenu mnuHorAlign = new JMenu("Horizontal Alignment");
      mnuHorAlign.setMnemonic('H');
      popupMenu.add(mnuHorAlign);

      groupHor = new ButtonGroup();
      String horAlignName[] = {"Left", "Center", "Right"};
      horAlign = new JRadioButtonMenuItem[horAlignName.length];
      for (int x = 0; x < horAlign.length; x++) {
         horAlign[x] = new JRadioButtonMenuItem(horAlignName[x]);
         mnuHorAlign.add(horAlign[x]);
         groupHor.add(horAlign[x]);
         horAlign[x].addActionListener(radioButtonHandler);
      }

      horAlign[1].setSelected(true);

      // Submenu dan item menu untuk penjajaran vertikal
      JMenu mnuVerAlign = new JMenu("Vertical Alignment");
      mnuVerAlign.setMnemonic('V');
      popupMenu.add(mnuVerAlign);

      groupVer = new ButtonGroup();
      String verAlignName[] = {"Top", "Center", "Bottom"};
      verAlign = new JRadioButtonMenuItem[verAlignName.length];
      for (int x = 0; x < verAlign.length; x++) {
         verAlign[x] = new JRadioButtonMenuItem(verAlignName[x]);
         mnuVerAlign.add(verAlign[x]);
         groupVer.add(verAlign[x]);
         verAlign[x].addActionListener(radioButtonHandler);
      }

      verAlign[1].setSelected(true);
      popupMenu.addSeparator();

      //submenu dan item menu untuk foreground color
      JMenu mnuForeColor = new JMenu("Foreground color");
      mnuForeColor.setMnemonic('o');
      popupMenu.add(mnuForeColor);

      groupFore = new ButtonGroup();
      String foreColorName[] = {"Black", "Blue", "Red"};
      foreColor = new JRadioButtonMenuItem[foreColorName.length];
      for (int x = 0; x < foreColor.length; x++) {
         foreColor[x] = new JRadioButtonMenuItem(foreColorName[x]);
         mnuForeColor.add(foreColor[x]);
         groupFore.add(foreColor[x]);
         foreColor[x].addActionListener(radioButtonHandler);
      }

      foreColor[1].setSelected(true);

      //submenu dan item menu untuk background color
      JMenu mnuBackColor = new JMenu("Background color");
      mnuBackColor.setMnemonic('a');
      popupMenu.add(mnuBackColor);

      groupBack = new ButtonGroup();
      String backColorName[] = {"Yellow", "White", "Cyan"};
      backColor = new JRadioButtonMenuItem[backColorName.length];
      for (int x = 0; x < backColor.length; x++) {
         backColor[x] = new JRadioButtonMenuItem(backColorName[x]);
         mnuBackColor.add(backColor[x]);
         groupBack.add(backColor[x]);
         backColor[x].addActionListener(radioButtonHandler);
      }

      backColor[0].setSelected(true);
      popupMenu.addSeparator();

      
      // Item menu Exit
      JMenuItem mnuExit = new JMenuItem("Exit");
      mnuExit.setMnemonic('E');
      popupMenu.add(mnuExit);
      mnuExit.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               System.exit(0);
            }
         }
      );
   }

   // Metoda displayPopupMenu
   private void displayPopupMenu(MouseEvent me) {
      if (me.isPopupTrigger())
         popupMenu.show(me.getComponent(), me.getX(), me.getY());
   }

   // Inner class
   class RadioButtonHandler implements ActionListener {
      
      public void actionPerformed(ActionEvent ae) {
      
         for (int y = 0; y < horAlign.length; y++) {
            if (horAlign[y].isSelected()) {
               label.setHorizontalAlignment(horAlignValue[y]);
               break;
            }
         }

         for (int y = 0; y < verAlign.length; y++) {
            if (verAlign[y].isSelected()) {
               label.setVerticalAlignment(verAlignValue[y]);
               break;
            }
         }

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

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

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

Membuat popup menu di Java

Pembuatan popup menu berbeda dengan menu umumnya (regular menu). Regular menu dibuat dengan meletakkan menu pada menu bar, sedangkan popup menu dihubungkan dengan parent komponen dimana popup menu ditampilkan. Untuk menampilkan popup menu, Anda menggunakan metoda show dari kelas JPopupMenu (pernyataan baris nomor 132). Metoda show mempunyai tiga parameter. Argumen parameter pertama adalah komponen dimana popup menu dapat ditampilkan (me.getComponent() mengacu ke obyek label), argumen parameter kedua dan ketiga adalah koordinat kartesius dimana posisi popup menu ditampilkan.

Komponen dapat menampilkan popup menu dengan cara mengklik tombol mouse tertentu. Di sistem Windows, popup menu akan ditampilkan ketika tombol mouse paling kanan dilepaskan, sedangkan di Motif, popup menu akan ditampilkan ketika tombol mouse ketiga ditekan dan ditahan. Komponen yang berkeinginan untuk dapat menampilkan popup menu harus mengimplementasikan interfes MouseListener dan mendeklarasikan ulang (overriding) metoda mousePressed dan mouseReleased yang masing-masing mempunyai parameter berupa kelas MouseEvent. Anda dapat menggunakan variabel yang mengacu ke obyek dari kelas MouseEvent (variabel acuan me) untuk menentukan komponen dan posisi tampilan popup menu

Baca artikel terkait lainnya:

Untuk memperbaiki mutu konten, Anda dapat berpartisipasi dengan cara melaporkan apabila menemukan kesalahan ketik, kata-kata rangkap, redaksi kurang pas (jelas), gambar pendukung tidak ada dan sebagainya melalui form Kontak Kami untuk mendapatkan perbaikan. Terima kasih atas kerjasamanya.

Hindro HindriantoHindro adalah pendiri sekaligus admin termasmedia.com dan topikit.com, blog online yang mengulas teknologi informasi. Dunia web mulai ditekuni tahun 2012 dengan mempelajari CMS Joomla dan Wordpress. Beberapa buku yang sekarang dipelajari antara lain PHP, HTML5, ASP.NET 4.5, JavaScript, CSS3, MySQL, Adobe Dreamweaver, Adobe Photoshop dan Adobe Flash.