| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Jython JTextComponent 1]]==
[[JTextComponent 1]] | [[Jython Swing]] | [[Swing]] | [[Jython]] | [[Python]] |
===方針===
*半ば強引に、[[JTextComponent 1|Swingで作成したサンプル] [Swingで作成したサンプル]を Jythonに書き換えてみる。
===内容===
*メニューとアクションの割付
*キーボード押下との割付
*Undo、Redoの実装Undo、[[R]]edoの実装
*Documentの利用
*Documentのイベント感知
from javax.swing import AbstractAction, Action, InputMap
from javax.swing import SwingUtilities, [[JFrame]], JMenu, JMenuBar, JScrollPane, JTextArea, KeyStroke
from javax.swing.event import UndoableEditEvent, UndoableEditListener
from javax.swing.text import DefaultEditorKit, Document, JTextComponent
def createUI(self):
frame = [[JFrame]]("TextTest") frame.setDefaultCloseOperation([[JFrame]].EXIT_ON_CLOSE)
txtArea = JTextArea(10, 30)
frame.contentPane.add(JScrollPane(txtArea), BorderLayout.CENTERCENTE[[R]])
# TextComponentが持つActionをMapに格納
action_param = {}
action_param['undo'] = undo
redoAction = RedoAction[[R]]edoAction(**action_param)
action_param['redoAction'] = redoAction
undoAction = UndoAction(**action_param)
# メニューを作成
menu = JMenuJ[[Menu]]("Edit")
menu.add(actionMap.get(DefaultEditorKit.cutAction))
menu.add(actionMap.get(DefaultEditorKit.copyAction))
menu.add(actionMap.get(DefaultEditorKit.selectAllAction))
mb = JMenuBarJ[[Menu]]Bar()
mb.add(menu)
frame.JMenuBar J[[Menu]]Bar = mb
# Documentのイベント感知(Undo Redo [[R]]edo 管理を行う)
doc = txtArea.document
doc.addUndoableEditListener(UndoEventHandler(**action_param))
# テキストのUndo、Redoにキーを割り当てる テキストのUndo、[[R]]edoにキーを割り当てる (Ctrl+z,Ctrl+y)
inputMap = txtArea.inputMap
undoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Z,Event.CTRL_MASKCT[[R]]L_MASK) redoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Y,Event.CTRL_MASKCT[[R]]L_MASK)
inputMap.put(undoKey, undoAction)
inputMap.put(redoKey, redoAction)
frame.pack()
frame.visible [[vi]]sible = True
class UndoEventHandler(UndoableEditListener):
ex.printStackTrace()
self.updateState()
# Redo [[R]]edo を可能に
self.redoAction.updateState()
self.setEnabled(self.undo.canUndo())
class RedoAction[[R]]edoAction(AbstractAction):
def __init__(self, undo):
super(RedoAction[[R]]edoAction, self).__init__("Redo[[R]]edo")
self.undo = undo
self.enabled = False
def updateState(self):
self.setEnabled(self.undo.canRedocan[[R]]edo())
class Invoker(Runnable[[R]]unnable):
def run(self):
jtt = JTextTest()
jtt.createUI()
SwingUtilities[[Swing]]Utilities.invokeLater(Invoker())

案内メニュー