Java Tutorial/Swing/JPopupMenu
Содержание
- 1 Adding action listener to popup menuitem
- 2 Creating a Popup Menu
- 3 Creating a Popup Menu with Nested Menus
- 4 Customizing JPopupMenu Look and Feel
- 5 Force the popup menu of a JMenu to be heavyweight:
- 6 Forcing a Popup Menu to Be a Heavyweight Component
- 7 JPopupMenu: the container for pop-up menu components
- 8 To display JPopupMenu on an AWT component
- 9 Using PopupMenuListener
<source lang="java">
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; // Define ActionListener class PopupActionListener implements ActionListener {
public void actionPerformed(ActionEvent actionEvent) { System.out.println("Selected: " + actionEvent.getActionCommand()); }
} public class JPopupMenuItemActionListener {
public static void main(final String args[]) { JFrame frame = new JFrame("PopupSample Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create popup menu, attach popup menu listener JPopupMenu popupMenu = new JPopupMenu("Title"); ActionListener actionListener = new PopupActionListener(); // Cut JMenuItem cutMenuItem = new JMenuItem("Cut"); popupMenu.add(cutMenuItem); // Copy JMenuItem copyMenuItem = new JMenuItem("Copy"); copyMenuItem.addActionListener(actionListener); popupMenu.add(copyMenuItem); // Paste JMenuItem pasteMenuItem = new JMenuItem("Paste"); pasteMenuItem.addActionListener(actionListener); pasteMenuItem.setEnabled(false); popupMenu.add(pasteMenuItem); // Separator popupMenu.addSeparator(); // Find JMenuItem findMenuItem = new JMenuItem("Find"); findMenuItem.addActionListener(actionListener); popupMenu.add(findMenuItem); JButton label = new JButton(); frame.add(label); label.setComponentPopupMenu(popupMenu); frame.setSize(350, 250); frame.setVisible(true); }
}</source>
Creating a Popup Menu
<source lang="java">
import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; public class Main {
public static void main(String[] argv) throws Exception { final JPopupMenu menu = new JPopupMenu(); JMenuItem item = new JMenuItem("Item Label");
// item.addActionListener(actionListener);
menu.add(item); JButton component = new JButton("button"); component.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { if (evt.isPopupTrigger()) { menu.show(evt.getComponent(), evt.getX(), evt.getY()); } } public void mouseReleased(MouseEvent evt) { if (evt.isPopupTrigger()) { menu.show(evt.getComponent(), evt.getX(), evt.getY()); } } }); }
}</source>
Creating a Popup Menu with Nested Menus
<source lang="java">
import javax.swing.JMenu; import javax.swing.JPopupMenu; public class Main {
public static void main(String[] argv) throws Exception { final JPopupMenu popupMenu = new JPopupMenu(); JMenu submenu = new JMenu("SubMenu1"); submenu.add("asdf"); submenu.add("asdf"); // Add submenu to popup menu popupMenu.add(submenu); }
}</source>
Customizing JPopupMenu Look and Feel
Property StringObject TypePopupMenu.actionMapActionMapPopupMenu.backgroundColorPopupMenu.borderBorderPopupMenu.consumeEventOnCloseBooleanPopupMenu.fontFontPopupMenu.foregroundColorPopupMenu.popupSoundStringPopupMenu.selectedWindowInputMapBindingsObject[ ]PopupMenu.selectedWindowInputMapBindings.RightToLeftObject[ ]PopupMenuSeparatorUIStringPopupMenuUIString
<source lang="java">
import javax.swing.JMenu; import javax.swing.JMenuItem; public class Main {
public static void main(String[] argv) throws Exception { JMenu menu = new JMenu("Menu Label"); menu.add(new JMenuItem("Item Label")); boolean lwPopup = menu.getPopupMenu().isLightWeightPopupEnabled(); // true menu.getPopupMenu().setLightWeightPopupEnabled(false); }
}</source>
Forcing a Popup Menu to Be a Heavyweight Component
<source lang="java">
import javax.swing.JPopupMenu; public class Main {
public static void main(String[] argv) throws Exception { JPopupMenu popupMenu = new JPopupMenu(); boolean lwPopup = popupMenu.isLightWeightPopupEnabled(); // true popupMenu.setLightWeightPopupEnabled(false); }
}</source>
Adding Menu Items to a JPopupMenu
<source lang="java">
public JMenuItem add(JMenuItem menuItem); public JMenuItem add(String label); public JMenuItem add(Action action); public void addSeparator();</source>
To display JPopupMenu on an AWT component
If you need to enable the display of a Panel (an AWT component), you can configure it at the individual JPopupMenu level or for your entire applet or application. At the individual pop-up level, just set the lightWeightPopupEnabled property to false.
The setInheritsPopupMenu() method accepts a boolean argument. When true, and no component pop-up menu has been directly set for the component, the parent container will be explored for a pop-up.
At the system level, this is done as follows:
<source lang="java">
// From now on, all JPopupMenus will be heavyweight JPopupMenu.setDefaultLightWeightPopupEnabled(false);</source>
Using PopupMenuListener
<source lang="java">
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; // Define PopupMenuListener class MyPopupMenuListener implements PopupMenuListener {
public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) { System.out.println("Canceled"); } public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) { System.out.println("Becoming Invisible"); } public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) { System.out.println("Becoming Visible"); }
} public class PopupMenuListenerDemo {
public static void main(final String args[]) { JFrame frame = new JFrame("PopupSample Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create popup menu, attach popup menu listener JPopupMenu popupMenu = new JPopupMenu("Title"); PopupMenuListener popupMenuListener = new MyPopupMenuListener(); popupMenu.addPopupMenuListener(popupMenuListener); // Cut JMenuItem cutMenuItem = new JMenuItem("Cut"); popupMenu.add(cutMenuItem); // Copy JMenuItem copyMenuItem = new JMenuItem("Copy"); popupMenu.add(copyMenuItem); // Paste JMenuItem pasteMenuItem = new JMenuItem("Paste"); pasteMenuItem.setEnabled(false); popupMenu.add(pasteMenuItem); // Separator popupMenu.addSeparator(); // Find JMenuItem findMenuItem = new JMenuItem("Find"); popupMenu.add(findMenuItem); JButton label = new JButton(); frame.add(label); label.setComponentPopupMenu(popupMenu); frame.setSize(350, 250); frame.setVisible(true); }
}</source>