Untuk membuat popup menu, Anda terlebih dahulu harus membuat obyek dari kelas JPopupMenu. Anda 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:
Kelas JPopupMenu merupakan kelas turunan dari kelas JComponent. JPopupMenu mempunyai dua konstruktor dan banyak metoda. Berikut ini adalah konstruktor dan 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 berikut ini masih terkait pemformatan teks. Anda dapat menentukan apakah 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 (foreground dan background). Semua operasi pemformatan teks hanya dilakukan melalui popup menu. Berikut ini adalah contoh program dan hasil eksekusinya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | // 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); } } |

Pembuatan popup menu berbeda dengan regular menu. Regular menu dibuat dengan meletakkan menu pada menu bar, sedangkan popup menu dihubungkan dengan parent komponen. Untuk menampilkan popup menu, Anda menggunakan metoda show dari kelas JPopupMenu (pernyataan baris nomor 132).
Metoda show mempunyai tiga parameter. parameter pertama adalah komponen dimana popup menu ditampilkan (me.getComponent() mengacu ke obyek label), 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 ditampilkan ketika tombol kanan mouse ditekan, sedangkan di Motif, popup menu ditampilkan ketika tombol mouse ketiga ditekan dan ditahan.
Komponen yang berkeinginan menampilkan popup menu harus mengimplementasikan interfes MouseListener dan mendeklarasikan ulang (overriding) metoda mousePressed dan mouseReleased yang mempunyai parameter kelas MouseEvent. Anda dapat menggunakan variabel yang mengacu ke obyek kelas MouseEvent (variabel acuan me) untuk menentukan komponen dan posisi tampilan popup menu