Skillversitas

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
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.