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

MyMemoWiki

「Jython JTextComponent 2」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の1版が非表示)
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] [Swingで作成したサンプル]を Jythonに書き換えてみる。
+
* 半ば強引に、[[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 SwingUtilities
+
  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.CENTER)
+
         self.frame.contentPane.add(JScrollPane(txtArea), BorderLayout.CENTE[[R]])
 
         self.frame.pack();
 
         self.frame.pack();
         self.frame.visible = True;
+
         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(Runnable):
+
  class Invoker([[R]]unnable):
 
     def run(self):
 
     def run(self):
 
         jtt = JTextTest2()
 
         jtt = JTextTest2()
 
         jtt.createUI()
 
         jtt.createUI()
 
   
 
   
  SwingUtilities.invokeLater(Invoker())
+
  [[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

方針

内容

DocumentFilterの利用
  • Document 変更メソッドのフィルタです。DocumentFilter を格納する Document が、insert または remove を介して変更されると、適当なメソッド呼び出しが DocumentFilter に転送されます。
  • 日本語入力中はinsertStringとremoveが交互に走る。入力が確定するとreplaceが走る。
  • コピー&ペースト等での入力でCALLされた場合insertStringが走る。
  • 英数字の入力で入力した場合replaceが走る
  • DeleteやBackSpaceで消す場合はremoveが走る。(ちなみに、消す対象が同じ場合offsetの値もlengthの値も変わらない)

ソースコード

実行例

0750 js jtext2.jpg

ソースコード
# -*- 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())