トップ 一覧 ping 検索 ヘルプ RSS ログイン

JTextComponent 3の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!JTextComponet 3
!!!JTextComponent 3
*ドキュメントの変更を感知 
*キャレットの状態を感知 

{{ref_image jtext3.jpg}}

 import java.awt.BorderLayout;
 import java.awt.Rectangle;
 
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.SwingUtilities;
 import javax.swing.event.CaretEvent;
 import javax.swing.event.CaretListener;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 
 /**
  * @see http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html
  */
 public class JTextTest3 {
     private JFrame frame;
     private JTextArea txtArea;
     private JLabel changeStats;
     private CaretListenerLabel caretStats;
     
     private void createUI() {
         frame = new JFrame("TextTest3");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         caretStats  = new CaretListenerLabel("caret:");
         changeStats = new JLabel("change:");
         JPanel statusPanel = new JPanel(new BorderLayout());
         statusPanel.add(changeStats, BorderLayout.CENTER);
         statusPanel.add(caretStats, BorderLayout.SOUTH);
         
         txtArea = new JTextArea(10, 30);
 
         JPanel basePanel = new JPanel(new BorderLayout());
         basePanel.add(new JScrollPane(txtArea), BorderLayout.CENTER);
         basePanel.add(statusPanel, BorderLayout.SOUTH);
         
         txtArea.getDocument().addDocumentListener(
                 new MyDocumentListener());
         txtArea.addCaretListener(caretStats);
         
         frame.getContentPane().add(basePanel);
         frame.pack();
         frame.setVisible(true);
     }
     public static void main(String[] args) {
         SwingUtilities.invokeLater(
                 new Runnable(){
                     public void run() {
                         JTextTest3 jft = new JTextTest3();
                         jft.createUI();
                     }
                 }
         );
     }
     /**
      * ドキュメントの変更を感知
      */
     class MyDocumentListener implements DocumentListener {
         public void changedUpdate(DocumentEvent e) {
             changeStats.setText("chage:chage");
         }
         public void insertUpdate(DocumentEvent e) {
             changeStats.setText("change:insert");   
         }
         public void removeUpdate(DocumentEvent e) {
             changeStats.setText("change:remove");
         }
     }
     /**
      * キャレットの状態を感知
      */
     @SuppressWarnings("serial")
     class CaretListenerLabel extends JLabel
                                 implements CaretListener {
         public CaretListenerLabel(String label) {
             super(label);
         }
         public void caretUpdate(CaretEvent e) {
             try {
                 int dot = e.getDot();
                 // モデル内の指定された位置を、ビュー座標系内の場所に変換
                 Rectangle rect = txtArea.modelToView(dot);
                 caretStats.setText("caret: text pos=" + dot 
                               + " view location [" + rect.x + "," + rect.y + "]");
             } catch (Exception ex) {
                 ex.printStackTrace();
             }
         }
     }
 }