Menus
Swing menus are JMenuBar, JMenu, and JMenuItem objects wired into a frame with setJMenuBar. In Jython you build the same menu tree with Python code and attach the same ActionListeners you use for buttons - menus are just components that fire ActionEvents.
A Basic Menu Bar
from javax.swing import (JFrame, JMenuBar, JMenu, JMenuItem,
JOptionPane)
frame = JFrame("Menus")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
def say_hello(event):
JOptionPane.showMessageDialog(frame, "Hello!")
def say_bye(event):
frame.dispose()
menu_bar = JMenuBar()
file_menu = JMenu("File")
open_item = JMenuItem("Open")
open_item.addActionListener(lambda e: print("open"))
save_item = JMenuItem("Save")
save_item.addActionListener(lambda e: print("save"))
exit_item = JMenuItem("Exit")
exit_item.addActionListener(say_bye)
file_menu.add(open_item)
file_menu.add(save_item)
file_menu.add(JMenu.SEPARATOR)
file_menu.add(exit_item)
help_menu = JMenu("Help")
about_item = JMenuItem("About")
about_item.addActionListener(say_hello)
help_menu.add(about_item)
menu_bar.add(file_menu)
menu_bar.add(help_menu)
frame.setJMenuBar(menu_bar)
frame.setSize(360, 200)
frame.setVisible(True)
Checkable and Radio Items
from javax.swing import JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem
from java.awt import Event
style_menu = JMenu("Style")
bold = JCheckBoxMenuItem("Bold")
italic = JCheckBoxMenuItem("Italic")
mono = JRadioButtonMenuItem("Monospace")
sans = JRadioButtonMenuItem("Sans")
group = javax.swing.ButtonGroup()
group.add(mono)
group.add(sans)
style_menu.add(bold)
style_menu.add(italic)
style_menu.add(JMenu.SEPARATOR)
style_menu.add(mono)
style_menu.add(sans)
Keyboard Shortcuts
from java.awt import KeyStroke
import java.awt.event as ev
open_item.setAccelerator(
KeyStroke.getKeyStroke("control O")) # Ctrl+O
Popup Menus
from javax.swing import JPopupMenu, JMenuItem
popup = JPopupMenu()
cut = JMenuItem("Cut")
copy = JMenuItem("Copy")
popup.add(cut)
popup.add(copy)
def on_click(e):
if e.getClickCount() == 2: # example: show on double-click
popup.show(e.getComponent(), e.getX(), e.getY())
some_component.addMouseListener({"mouseClicked": on_click})
Menu Conventions
- Standard order: File, Edit, View, ... Help; Exit at the bottom of File.
- Accelerators for common actions (Ctrl+S save, Ctrl+O open, F1 help).
- Separate groups with JMenu.SEPARATOR to keep menus scannable.
Summary
Build Swing menus by composing JMenuBar, JMenu, and JMenuItem objects, attaching ActionListeners to items, and setting accelerators with KeyStroke. Add checkable/radio items for toggles, separators for grouping, and JPopupMenu for context menus - all the same event model as buttons, just with a menu-shaped trigger.