「Jython JTextComponent 2」の版間の差分
ナビゲーションに移動
検索に移動
(同じ利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
− | ==Jython JTextComponent 2== | + | ==[[Jython JTextComponent 2]]== |
− | [[JTextComponent 2][Jython Swing][Swing][Jython][Python]] | + | [[JTextComponent 2]] | [[Jython Swing]] | [[Swing]] | [[Jython]] | [[Python]] | |
http://ryumago.dragon-breath.net/home/program/memo.html | http://ryumago.dragon-breath.net/home/program/memo.html | ||
===方針=== | ===方針=== | ||
− | * 半ば強引に、[JTextComponent 2] | + | * 半ば強引に、[[JTextComponent 2|Swingで作成したサンプル]]を Jythonに書き換えてみる。 |
===内容=== | ===内容=== | ||
23行目: | 23行目: | ||
from java.lang import * | from java.lang import * | ||
from java.awt import BorderLayout | from java.awt import BorderLayout | ||
− | from javax.swing import JFrame | + | from javax.swing import [[JFrame]] |
from javax.swing import JScrollPane | from javax.swing import JScrollPane | ||
from javax.swing import JTextArea | from javax.swing import JTextArea | ||
− | from javax.swing import | + | from javax.swing import [[Swing]]Utilities |
from javax.swing.text import AbstractDocument | from javax.swing.text import AbstractDocument | ||
from javax.swing.text import AttributeSet | from javax.swing.text import AttributeSet | ||
35行目: | 35行目: | ||
class JTextTest2(object): | class JTextTest2(object): | ||
def createUI(self): | def createUI(self): | ||
− | self.frame = JFrame("TextTest2") | + | self.frame = [[JFrame]]("TextTest2") |
− | self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | self.frame.setDefaultCloseOperation([[JFrame]].EXIT_ON_CLOSE); |
txtArea = JTextArea(10, 30) | txtArea = JTextArea(10, 30) | ||
43行目: | 43行目: | ||
doc.documentFilter = EchoDocumentFilter() | doc.documentFilter = EchoDocumentFilter() | ||
− | self.frame.contentPane.add(JScrollPane(txtArea), BorderLayout. | + | self.frame.contentPane.add(JScrollPane(txtArea), BorderLayout.CENTE[[R]]) |
self.frame.pack(); | self.frame.pack(); | ||
− | self.frame. | + | self.frame.[[vi]]sible = True; |
class EchoDocumentFilter(DocumentFilter): | class EchoDocumentFilter(DocumentFilter): | ||
60行目: | 60行目: | ||
fb.replace(offset, length, text + text, attrs) | fb.replace(offset, length, text + text, attrs) | ||
− | class Invoker( | + | class Invoker([[R]]unnable): |
def run(self): | def run(self): | ||
jtt = JTextTest2() | jtt = JTextTest2() | ||
jtt.createUI() | jtt.createUI() | ||
− | + | [[Swing]]Utilities.invokeLater(Invoker()) |
2020年2月16日 (日) 04:28時点における最新版
目次
Jython JTextComponent 2
JTextComponent 2 | Jython Swing | Swing | Jython | Python |
http://ryumago.dragon-breath.net/home/program/memo.html
方針
- 半ば強引に、Swingで作成したサンプルを Jythonに書き換えてみる。
内容
DocumentFilterの利用
- Document 変更メソッドのフィルタです。DocumentFilter を格納する Document が、insert または remove を介して変更されると、適当なメソッド呼び出しが DocumentFilter に転送されます。
- 日本語入力中はinsertStringとremoveが交互に走る。入力が確定するとreplaceが走る。
- コピー&ペースト等での入力でCALLされた場合insertStringが走る。
- 英数字の入力で入力した場合replaceが走る
- DeleteやBackSpaceで消す場合はremoveが走る。(ちなみに、消す対象が同じ場合offsetの値もlengthの値も変わらない)
ソースコード
実行例
ソースコード
# -*- coding: utf-8 -*- from java.lang import * from java.awt import BorderLayout from javax.swing import JFrame from javax.swing import JScrollPane from javax.swing import JTextArea from javax.swing import SwingUtilities from javax.swing.text import AbstractDocument from javax.swing.text import AttributeSet from javax.swing.text import BadLocationException from javax.swing.text import Document from javax.swing.text import DocumentFilter class JTextTest2(object): def createUI(self): self.frame = JFrame("TextTest2") self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); txtArea = JTextArea(10, 30) # Documentを取得し、DocumentFilterをセット doc = txtArea.document doc.documentFilter = EchoDocumentFilter() self.frame.contentPane.add(JScrollPane(txtArea), BorderLayout.CENTER) self.frame.pack(); self.frame.visible = True; class EchoDocumentFilter(DocumentFilter): def insertString(self, fb, offset, string, attr): print "insertString : %s" % string fb.insertString(offset, string, attr) def remove(self, fb, offset, length): print "remove" fb.remove(offset, length) def replace(self, fb, offset, length, text, attrs): print "replace : %s" % text fb.replace(offset, length, text + text, attrs) class Invoker(Runnable): def run(self): jtt = JTextTest2() jtt.createUI() SwingUtilities.invokeLater(Invoker())
© 2006 矢木浩人