《Jython2.5》The Swing Tutorial, MenuDemoProject
The Swing Tutorial - Jython 版《記事一覧》
《事例》MenuDemoProject
《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
■ 概要
公式サイト《The Swing Tutorial》で公開されている例題を、Jython で再構成したものを公開します。
ここでは、スタッフの研修用に作成した例題(サンプル集)を公開します。 原則として、オリジナル版の趣旨を尊重しつつ、Jython の特徴を活かすように改編しています。 なお、プログラムの不具合については「小粒ちゃん」にお問い合わせください。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
事例:コードの解説
#! /usr/bin/jython2.5b3 ## ---------------------------------------- from java.awt import BorderLayout from java.awt.event import ActionEvent from java.awt.event import ActionListener from java.awt.event import ItemListener from java.awt.event import KeyEvent from javax.swing import ButtonGroup from javax.swing import ImageIcon from javax.swing import JCheckBoxMenuItem from javax.swing import JFrame from javax.swing import JMenu from javax.swing import JMenuBar from javax.swing import JMenuItem from javax.swing import JPanel from javax.swing import JRadioButtonMenuItem from javax.swing import JScrollPane from javax.swing import JTextArea from javax.swing import KeyStroke ## ---------------------------------------- class MenuDemo(ActionListener, ItemListener): def createMenuBar(self): menuBar = JMenuBar() menu = JMenu("A Menu") menu.setMnemonic(KeyEvent.VK_A) menuBar.add(menu) self._JMenuItems(menu) menu.addSeparator() self._RadioButtonMenuItems(menu) menu.addSeparator() self._CheckBoxMenuItems(menu) menu.addSeparator() self._SubMenu(menu) self._SecondMenu(menuBar) return menuBar
様々なメニュー項目を設定します。
def _JMenuItems(self, menu): accelerator = KeyStroke.getKeyStroke( KeyEvent.VK_1, ActionEvent.ALT_MASK) icon = MenuDemo.createImageIcon("images/middle.gif") for text, icon, key, accelerator in [ ("A text-only menu item", None, KeyEvent.VK_T, accelerator), ("Both text and icon", icon, KeyEvent.VK_B, None ), ("", icon, KeyEvent.VK_D, None ), ]: menuItem = JMenuItem( text = text, icon = icon, accelerator = accelerator, actionPerformed = self.actionPerformed, ) menuItem.setMnemonic(key) menu.add(menuItem)
各メニュー項目 JMenuItem を設定します。
def _RadioButtonMenuItems(self, menu): group = ButtonGroup() for text, selected, key in [ ("A radio button menu item", True, KeyEvent.VK_R), ("Another one", False, KeyEvent.VK_O), ]: rbMenuItem = JRadioButtonMenuItem( text = text, selected = selected, actionPerformed = self.actionPerformed, ) rbMenuItem.setMnemonic(key) group.add(rbMenuItem) menu.add(rbMenuItem)
各メニュー項目 JRadioButtonMenuItem を設定します。
def _CheckBoxMenuItems(self, menu): for text, key in [ ("A check box menu item", KeyEvent.VK_C), ("Another one", KeyEvent.VK_H), ]: cbMenuItem = JCheckBoxMenuItem( text = text, actionPerformed = self.actionPerformed, ) cbMenuItem.setMnemonic(key) menu.add(cbMenuItem)
各メニュー項目 JCheckBoxMenuItem を設定します。
def _SubMenu(self, menu): submenu = JMenu("A submenu") submenu.setMnemonic(KeyEvent.VK_S) accelerator = KeyStroke.getKeyStroke( KeyEvent.VK_2, ActionEvent.ALT_MASK) for text, accelerator in [ ("An item in the submenu", accelerator), ("Another item", None), ]: menuItem = JMenu( text = text, accelerator = accelerator, actionPerformed = self.actionPerformed, ) submenu.add(menuItem) menu.add(submenu)
各メニュー項目 JMenu には、サブメニュー JMenuItem を設定します。
def _SecondMenu(self, menuBar): menu = JMenu("Another Menu") menu.setMnemonic(KeyEvent.VK_N) menuBar.add(menu) ## ---------------------------------------- def createContentPane(self): contentPane = JPanel( layout = BorderLayout(), opaque = True, ) self.output = JTextArea( columns = 5, rows = 30, editable = False, tabSize = 2, # (@.@) append ) scrollPane = JScrollPane(self.output) contentPane.add(scrollPane, BorderLayout.CENTER) return contentPane ## ---------------------------------------- def actionPerformed(self, e): source = e.source s = [ "Action event detected.", "\tEvent source: %s (an instance of %s)"%( source.text, self.getClassName(source)), "", ] self.output.append("\n".join(s)) self.output.caretPosition = self.output.document.length def getClassName(self, o): return o.__class__.__name__ @staticmethod def createImageIcon(path): return ImageIcon(path) ## ---------------------------------------- def ex(*args): demo = MenuDemo() frame = JFrame( defaultCloseOperation = JFrame.EXIT_ON_CLOSE, title = "MenuDemo", JMenuBar = demo.createMenuBar(), contentPane = demo.createContentPane(), ) frame.size = 450, 260 frame.visible = True ## ---------------------------------------- if __name__=='__main__': ex()
Tips
》作業中です《
Last updated♪09/05/27