「JTextComponent 2」の版間の差分
ナビゲーションに移動
検索に移動
(同じ利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
− | ==JTextComponent 2== | + | ==[[JTextComponent 2]]== |
− | [[Jython JTextComponent 2]][[Jython Swing]][[Swing]][[Jython]][[Python]] | + | [[Jython JTextComponent 2]] | [[Jython Swing]] | [[Swing]] | [[Jython]] | [[Python]] | |
===内容=== | ===内容=== | ||
12行目: | 12行目: | ||
import java.awt.BorderLayout; | import java.awt.BorderLayout; | ||
− | import javax.swing.JFrame; | + | import javax.swing.[[JFrame]]; |
import javax.swing.JScrollPane; | import javax.swing.JScrollPane; | ||
import javax.swing.JTextArea; | import javax.swing.JTextArea; | ||
− | import javax.swing. | + | import javax.swing.[[Swing]]Utilities; |
import javax.swing.text.AbstractDocument; | import javax.swing.text.AbstractDocument; | ||
import javax.swing.text.AttributeSet; | import javax.swing.text.AttributeSet; | ||
26行目: | 26行目: | ||
*/ | */ | ||
public class JTextTest2 { | public class JTextTest2 { | ||
− | private JFrame frame; | + | private [[JFrame]] frame; |
private void createUI() { | private void createUI() { | ||
− | frame = new JFrame("TextTest2"); | + | frame = new [[JFrame]]("TextTest2"); |
− | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | frame.setDefaultCloseOperation([[JFrame]].EXIT_ON_CLOSE); |
JTextArea txtArea = new JTextArea(10, 30); | JTextArea txtArea = new JTextArea(10, 30); | ||
39行目: | 39行目: | ||
((AbstractDocument)doc).setDocumentFilter(new EchoDocumentFilter()); | ((AbstractDocument)doc).setDocumentFilter(new EchoDocumentFilter()); | ||
− | frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout. | + | frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout.CENTE[[R]]); |
frame.pack(); | frame.pack(); | ||
45行目: | 45行目: | ||
} | } | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
− | + | [[Swing]]Utilities.invokeLater( | |
− | new | + | new [[R]]unnable(){ |
public void run() { | public void run() { | ||
JTextTest2 jft = new JTextTest2(); | JTextTest2 jft = new JTextTest2(); |
2020年2月16日 (日) 04:28時点における最新版
JTextComponent 2
Jython JTextComponent 2 | Jython Swing | Swing | Jython | Python |
内容
DocumentFilterの利用
Document 変更メソッドのフィルタです。DocumentFilter を格納する Document が、insert または remove を介して変更されると、適当なメソッド呼び出しが DocumentFilter に転送されます。
ソースコード
実行例
ソースコード
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.DocumentFilter; /** * @see http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#commands */ public class JTextTest2 { private JFrame frame; private void createUI() { frame = new JFrame("TextTest2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea txtArea = new JTextArea(10, 30); // Documentを取得し、DocumentFilterをセット // 一旦、AbstractDocumentにキャストする必要あり Document doc = txtArea.getDocument(); ((AbstractDocument)doc).setDocumentFilter(new EchoDocumentFilter()); frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater( new Runnable(){ public void run() { JTextTest2 jft = new JTextTest2(); jft.createUI(); } } ); } /** * 日本語入力中はinsertStringとremoveが交互に走る。入力が確定するとreplaceが走る。 * コピー&ペースト等での入力でCALLされた場合insertStringが走る。 * 英数字の入力で入力した場合replaceが走る * DeleteやBackSpaceで消す場合はremoveが走る。(ちなみに、消す対象が同じ場合offsetの値もlengthの値も変わらない) * @see http://ryumago.dragon-breath.net/home/program/memo.html */ class EchoDocumentFilter extends DocumentFilter { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { System.out.println("insertString : " + string); fb.insertString(offset, string, attr); } @Override public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { System.out.println("remove"); fb.remove(offset, length); } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { System.out.println("replace : " + text); fb.replace(offset, length, text + text, attrs); } } }
© 2006 矢木浩人