1: #! /usr/bin/env python
2: # coding: utf-8
3: ## ----------------------------------------
4: ##
5: ## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
6: ##
7: ## ----------------------------------------
8: #...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
9: """
10: >>> tips()
11:
12: >>> ## ----------------------------------------
13: >>> None
14: version: #1.0.23
15: """
16: ## ---------------------------------------- demo: jython
17: """
18: _jython=/Users/sketch/book/java_useBetter_1/_jython
19:
20: cd /Users/sketch/book/java_useBetter_1/swing/JMenuBar/menuLookDemo/jython/
21:
22: JYTHONPATH=$_jython jython -i MenuLookDemo.py
23:
24: ============================================================
25: Version: 2.5.0 (Release_2_5_0:6476, Jun 16 2009, 13:33:26)
26: Module : MenuLookDemo.py
27: Date : Thu Sep 23 12:33:17 2010
28: ============================================================
29: """
30: ## ----------------------------------------
31: ##package components;
32:
33: from java.awt import BorderLayout
34: from java.awt.event import ActionEvent
35: from java.awt.event import KeyEvent
36: from java.lang import System
37: from javax.swing import ButtonGroup
38: from javax.swing import ImageIcon
39: from javax.swing import JCheckBoxMenuItem
40: from javax.swing import JFrame
41: from javax.swing import JMenu
42: from javax.swing import JMenuBar
43: from javax.swing import JMenuItem
44: from javax.swing import JPanel
45: from javax.swing import JRadioButtonMenuItem
46: from javax.swing import JScrollPane
47: from javax.swing import JTextArea
48: from javax.swing import KeyStroke
49: from os.path import exists
50:
51: ## ----------------------------------------
52: """
53: * This class exists solely to show you what menus look like.
54: * It has no menu-related event handling.
55: """
56: class MenuLookDemo:
57: def __init__(self, master):
58:
59: def createMenuBar():
60:
61: #/Create the menu bar.
62: menuBar = JMenuBar()
63:
64: #/Build the first menu.
65: menu = JMenu(
66: "A Menu",
67: KeyEvent.VK_A,
68: )
69: menu.accessibleContext.accessibleDescription = (
70: "The only menu in this program that has menu items")
71: menuBar.add(menu)
72:
73: #/a group of JMenuItems
74: menuItem = JMenuItem(
75: "A text-only menu item",
76: KeyEvent.VK_T,
77: accelerator = KeyStroke.getKeyStroke(
78: KeyEvent.VK_1, ActionEvent.ALT_MASK)
79: )
80: menuItem.accessibleContext.accessibleDescription = (
81: "This doesn't really do anything")
82: menu.add(menuItem)
83:
84: icon = MenuLookDemo.createImageIcon("_images/middle.gif")
85: menuItem = JMenuItem(
86: "Both text and icon",
87: KeyEvent.VK_B,
88: icon = icon,
89: )
90: menu.add(menuItem)
91:
92: menuItem = JMenuItem(
93: "",
94: KeyEvent.VK_D,
95: icon = icon,
96: )
97: menu.add(menuItem)
98:
99: #/a group of radio button menu items
100: menu.addSeparator()
101: group = ButtonGroup()
102:
103: rbMenuItem = JRadioButtonMenuItem(
104: "A radio button menu item",
105: KeyEvent.VK_R,
106: selected = True,
107: )
108: group.add(rbMenuItem)
109: menu.add(rbMenuItem)
110:
111: rbMenuItem = JRadioButtonMenuItem(
112: "Another one",
113: KeyEvent.VK_O,
114: )
115: group.add(rbMenuItem)
116: menu.add(rbMenuItem)
117:
118: #/a group of check box menu items
119: menu.addSeparator()
120: cbMenuItem = JCheckBoxMenuItem(
121: "A check box menu item",
122: KeyEvent.VK_C,
123: )
124: menu.add(cbMenuItem)
125:
126: cbMenuItem = JCheckBoxMenuItem(
127: "Another one",
128: KeyEvent.VK_H,
129: )
130: menu.add(cbMenuItem)
131:
132: #/a submenu
133: menu.addSeparator()
134: submenu = JMenu(
135: "A submenu",
136: KeyEvent.VK_S,
137: )
138:
139: menuItem = JMenuItem(
140: "An item in the submenu",
141: accelerator = KeyStroke.getKeyStroke(
142: KeyEvent.VK_2, ActionEvent.ALT_MASK),
143: )
144: submenu.add(menuItem)
145:
146: menuItem = JMenuItem("Another item")
147: submenu.add(menuItem)
148: menu.add(submenu)
149:
150: #/Build second menu in the menu bar.
151: menu = JMenu(
152: "Another Menu",
153: KeyEvent.VK_N,
154: )
155: menu.accessibleContext.accessibleDescription = (
156: "This menu does nothing")
157: menuBar.add(menu)
158:
159: return menuBar
160:
161: def createContentPane():
162: #/Create the content-pane-to-be.
163: contentPane = JPanel(
164: BorderLayout(),
165: opaque = True,
166: )
167:
168: #/Create a scrolled text area.
169: output = JTextArea(
170: 5, 30,
171: editable = False,
172: )
173: scrollPane = JScrollPane(output)
174:
175: #//Add the text area to the content pane.
176: contentPane.add(scrollPane, BorderLayout.CENTER)
177:
178: return contentPane
179:
180: master.JMenuBar = createMenuBar()
181: master.contentPane = createContentPane()
182:
183: ## ----------------------------------------
184: @staticmethod
185: def createImageIcon(path):
186: #** Returns an ImageIcon, or null if the path was invalid. */
187: ## java.net.URL imgURL = MenuLookDemo.class.getResource(path);
188: imgURL = path if exists(path) else None
189: if imgURL != None:
190: return ImageIcon(imgURL)
191: else:
192: System.err.println("Couldn't find file: %s"%path)
193: return None
194:
195: ## ----------------------------------------
196: """
197: * Create the GUI and show it. For thread safety,
198: * this method should be invoked from the
199: * event-dispatching thread.
200: """
201: @staticmethod
202: def createAndShowGUI():
203: #/Create and set up the window.
204: frame = JFrame(
205: title = "MenuLookDemo",
206: size = (450,260),
207: locationRelativeTo = None,
208: defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
209: )
210:
211: #/Create and set up the content pane.
212: MenuLookDemo(frame)
213:
214: #/Display the window.
215: frame.visible = True
216:
217: ## ----------------------------------------
218: from __init__ import *
219: tips = MenuLookDemo.createAndShowGUI
220:
221: if __name__=='__main__':
222: inform()
223: testmod()
224:
225: ## ========================================