JTextComponent 3
2020年2月15日 (土) 07:33時点におけるPiroto (トーク | 投稿記録)による版 (ページの作成:「==JTextComponent 3== *ドキュメントの変更を感知 *キャレットの状態を感知 File:0742_jtext3.jpg import java.awt.BorderLayout; import j…」)
JTextComponent 3
- ドキュメントの変更を感知
- キャレットの状態を感知
- 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();
- }
- }
- }
- }
© 2006 矢木浩人