Java/Swing JFC/Popup menu
Содержание
- 1 A popup menu is sometimes called a context menu
- 2 Configure all popup menus to be heavyweight
- 3 Creating a Popup Menu
- 4 Creating a Popup Menu with Nested Menus
- 5 Force the popup menu of a JMenu to be heavyweight
- 6 Forcing a Popup Menu to Be a Heavyweight Component
- 7 JPopupMenu with mouse event
- 8 set Component Popup Menu
- 9 setInheritsPopupMenu
<source lang="java">
import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; public class PopupMenu {
public static void main(String[] args) { JFrame frame = new JFrame("JPopupMenu"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final Toolkit toolkit = frame.getToolkit(); final JPopupMenu menu = new JPopupMenu(); JMenuItem menuItemBeep = new JMenuItem("Beep"); menuItemBeep.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { toolkit.beep(); } }); menu.add(menuItemBeep); JMenuItem menuItemClose = new JMenuItem("Close"); menuItemClose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menu.add(menuItemClose); frame.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (e.getButton() == e.BUTTON3) { menu.show(e.getComponent(), e.getX(), e.getY()); } } }); frame.setSize(250, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}
</source>
<source lang="java">
import javax.swing.JPopupMenu; public class Main {
public static void main(String[] argv) throws Exception { boolean lwPopup = JPopupMenu.getDefaultLightWeightPopupEnabled(); // true // Globally use heavyweight components for all popup menus JPopupMenu.setDefaultLightWeightPopupEnabled(false); }
}
</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>
<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>
JPopupMenu with mouse event
<source lang="java">
import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; public class PopUpColorMenu implements ActionListener {
Component selectedComponent; public PopUpColorMenu() { JFrame frame = new JFrame(); final JPopupMenu colorMenu = new JPopupMenu("Color"); colorMenu.add(makeMenuItem("Red")); colorMenu.add(makeMenuItem("Green")); colorMenu.add(makeMenuItem("Blue")); MouseListener mouseListener = new MouseAdapter() { public void mousePressed(MouseEvent e) { checkPopup(e); } public void mouseClicked(MouseEvent e) { checkPopup(e); } public void mouseReleased(MouseEvent e) { checkPopup(e); } private void checkPopup(MouseEvent e) { if (e.isPopupTrigger()) { selectedComponent = e.getComponent(); colorMenu.show(e.getComponent(), e.getX(), e.getY()); } } }; frame.setLayout(new FlowLayout()); JButton button = new JButton("Uno"); button.addMouseListener(mouseListener); frame.add(button); button = new JButton("Due"); button.addMouseListener(mouseListener); frame.add(button); button = new JButton("Tre"); button.addMouseListener(mouseListener); frame.add(button); frame.getContentPane().addMouseListener(mouseListener); frame.setSize(200, 50); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { String color = e.getActionCommand(); if (color.equals("Red")) selectedComponent.setBackground(Color.red); else if (color.equals("Green")) selectedComponent.setBackground(Color.green); else if (color.equals("Blue")) selectedComponent.setBackground(Color.blue); } private JMenuItem makeMenuItem(String label) { JMenuItem item = new JMenuItem(label); item.addActionListener(this); return item; } public static void main(String[] args) { new PopUpColorMenu(); }
}
</source>
set Component Popup Menu
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JTextArea; import javax.swing.JTextField; public class ContextMenu implements ActionListener {
JTextArea textArea = new JTextArea(); public ContextMenu() { final JPopupMenu contextMenu = new JPopupMenu("Edit"); contextMenu.add(makeMenuItem("Save")); contextMenu.add(makeMenuItem("Save As")); contextMenu.add(makeMenuItem("Close")); JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); frame.add(panel); panel.setComponentPopupMenu(contextMenu); textArea.setInheritsPopupMenu(true); panel.add(BorderLayout.CENTER, textArea); JTextField textField = new JTextField(); textField.setInheritsPopupMenu(true); panel.add(BorderLayout.SOUTH, textField); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 200); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { textArea.append(e.getActionCommand() + "\n"); } private JMenuItem makeMenuItem(String label) { JMenuItem item = new JMenuItem(label); item.addActionListener(this); return item; } public static void main(String[] args) { new ContextMenu(); }
}
</source>
setInheritsPopupMenu
<source lang="java">
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JTextArea; import javax.swing.JTextField; public class ContextMenu implements ActionListener {
JTextArea textArea = new JTextArea(); public ContextMenu() { final JPopupMenu contextMenu = new JPopupMenu("Edit"); contextMenu.add(makeMenuItem("Save")); contextMenu.add(makeMenuItem("Save As")); contextMenu.add(makeMenuItem("Close")); JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); frame.add(panel); panel.setComponentPopupMenu(contextMenu); textArea.setInheritsPopupMenu(true); panel.add(BorderLayout.CENTER, textArea); JTextField textField = new JTextField(); textField.setInheritsPopupMenu(true); panel.add(BorderLayout.SOUTH, textField); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 200); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { textArea.append(e.getActionCommand() + "\n"); } private JMenuItem makeMenuItem(String label) { JMenuItem item = new JMenuItem(label); item.addActionListener(this); return item; } public static void main(String[] args) { new ContextMenu(); }
}
</source>