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

MyMemoWiki

JTextComponent 3

提供: MyMemoWiki
2020年2月15日 (土) 07:33時点におけるPiroto (トーク | 投稿記録)による版 (ページの作成:「==JTextComponent 3== *ドキュメントの変更を感知 *キャレットの状態を感知 File:0742_jtext3.jpg import java.awt.BorderLayout; import j…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

JTextComponent 3

  • ドキュメントの変更を感知
  • キャレットの状態を感知

0742 jtext3.jpg

  1. import java.awt.BorderLayout;
  2. import java.awt.Rectangle;
  3.  
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;
  6. import javax.swing.JPanel;
  7. import javax.swing.JScrollPane;
  8. import javax.swing.JTextArea;
  9. import javax.swing.SwingUtilities;
  10. import javax.swing.event.CaretEvent;
  11. import javax.swing.event.CaretListener;
  12. import javax.swing.event.DocumentEvent;
  13. import javax.swing.event.DocumentListener;
  14.  
  15. /**
  16. * @see http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html
  17. */
  18. public class JTextTest3 {
  19. private JFrame frame;
  20. private JTextArea txtArea;
  21. private JLabel changeStats;
  22. private CaretListenerLabel caretStats;
  23. private void createUI() {
  24. frame = new JFrame("TextTest3");
  25. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26. caretStats = new CaretListenerLabel("caret:");
  27. changeStats = new JLabel("change:");
  28. JPanel statusPanel = new JPanel(new BorderLayout());
  29. statusPanel.add(changeStats, BorderLayout.CENTER);
  30. statusPanel.add(caretStats, BorderLayout.SOUTH);
  31. txtArea = new JTextArea(10, 30);
  32.  
  33. JPanel basePanel = new JPanel(new BorderLayout());
  34. basePanel.add(new JScrollPane(txtArea), BorderLayout.CENTER);
  35. basePanel.add(statusPanel, BorderLayout.SOUTH);
  36. txtArea.getDocument().addDocumentListener(
  37. new MyDocumentListener());
  38. txtArea.addCaretListener(caretStats);
  39. frame.getContentPane().add(basePanel);
  40. frame.pack();
  41. frame.setVisible(true);
  42. }
  43. public static void main(String[] args) {
  44. SwingUtilities.invokeLater(
  45. new Runnable(){
  46. public void run() {
  47. JTextTest3 jft = new JTextTest3();
  48. jft.createUI();
  49. }
  50. }
  51. );
  52. }
  53. /**
  54. * ドキュメントの変更を感知
  55. */
  56. class MyDocumentListener implements DocumentListener {
  57. public void changedUpdate(DocumentEvent e) {
  58. changeStats.setText("chage:chage");
  59. }
  60. public void insertUpdate(DocumentEvent e) {
  61. changeStats.setText("change:insert");
  62. }
  63. public void removeUpdate(DocumentEvent e) {
  64. changeStats.setText("change:remove");
  65. }
  66. }
  67. /**
  68. * キャレットの状態を感知
  69. */
  70. @SuppressWarnings("serial")
  71. class CaretListenerLabel extends JLabel
  72. implements CaretListener {
  73. public CaretListenerLabel(String label) {
  74. super(label);
  75. }
  76. public void caretUpdate(CaretEvent e) {
  77. try {
  78. int dot = e.getDot();
  79. // モデル内の指定された位置を、ビュー座標系内の場所に変換
  80. Rectangle rect = txtArea.modelToView(dot);
  81. caretStats.setText("caret: text pos=" + dot
  82. + " view location [" + rect.x + "," + rect.y + "]");
  83. } catch (Exception ex) {
  84. ex.printStackTrace();
  85. }
  86. }
  87. }
  88. }