[Java] JTextArea的事件处理2 →→→→→进入此内容的聊天室

来自 , 2019-05-18, 写在 Java, 查看 109 次.
URL http://www.code666.cn/view/20aee3a5
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import javax.swing.undo.*;
  5. import javax.swing.event.*;
  6. import javax.swing.text.*;
  7.  
  8. public class JTextArea5 extends JFrame implements UndoableEditListener,
  9.                 DocumentListener {
  10.         private UndoableEdit edit;
  11.         private JTextArea jta;
  12.         private JTextArea message;
  13.         private JMenuItem undoitem;
  14.         private JMenuItem redoitem;
  15.  
  16.         public JTextArea5() {
  17.                 super("JTextArea");
  18.                 jta = new JTextArea();
  19.                 jta.getDocument().addUndoableEditListener(this);
  20.                 jta.getDocument().addDocumentListener(this);
  21.                 message = new JTextArea();
  22.                 message.setEditable(false);
  23.  
  24.                 JPanel p1 = new JPanel();
  25.                 p1.setLayout(new GridLayout(1, 1));
  26.                 p1.setBorder(BorderFactory.createTitledBorder("Edit Area"));
  27.                 p1.add(new JScrollPane(jta));
  28.  
  29.                 JPanel p2 = new JPanel();
  30.                 p2.setLayout(new GridLayout(1, 1));
  31.                 p2.setBorder(BorderFactory.createTitledBorder("Message"));
  32.                 p2.add(new JScrollPane(message));
  33.  
  34.                 getContentPane().setLayout(new GridLayout(2, 1));
  35.                 getContentPane().add(p1);
  36.                 getContentPane().add(p2);
  37.  
  38.                 JMenuBar bar = new JMenuBar();
  39.                 JMenu theMenu = new JMenu("Edit");
  40.                 undoitem = new JMenuItem("Undo");
  41.                 redoitem = new JMenuItem("Redo");
  42.                 theMenu.add(undoitem);
  43.                 theMenu.add(redoitem);
  44.                 bar.add(theMenu);
  45.                 updateMenuItem();
  46.  
  47.                 setJMenuBar(bar);
  48.                 setSize(300, 300);
  49.  
  50.                 undoitem.addActionListener(new ActionListener() {
  51.                         public void actionPerformed(ActionEvent ev) {
  52.                                 edit.undo();
  53.                                 updateMenuItem();
  54.                                 message.append("- Undo -\n");
  55.                         }
  56.                 });
  57.  
  58.                 redoitem.addActionListener(new ActionListener() {
  59.                         public void actionPerformed(ActionEvent ev) {
  60.                                 edit.redo();
  61.                                 updateMenuItem();
  62.                                 message.append("- Redo -\n");
  63.                         }
  64.                 });
  65.         } // end of JTextArea5
  66.  
  67.         public void undoableEditHappened(UndoableEditEvent ev) {
  68.                 StringBuffer buf = new StringBuffer(200);
  69.                 edit = ev.getEdit();
  70.                 buf.append("undoableEdit:");
  71.                 buf.append(edit.getPresentationName());
  72.                 buf.append("\n");
  73.                 message.append(buf.toString());
  74.                 updateMenuItem();
  75.         }// end of undoableEditHappened()
  76.  
  77.         public void updateMenuItem() {
  78.  
  79.                 if (edit != null) {
  80.                         undoitem.setEnabled(edit.canUndo());
  81.                         redoitem.setEnabled(edit.canRedo());
  82.                         undoitem.setText(edit.getUndoPresentationName());
  83.                         redoitem.setText(edit.getRedoPresentationName());
  84.                 } else {
  85.                         undoitem.setEnabled(false);
  86.                         redoitem.setEnabled(false);
  87.                         undoitem.setText("Undo");
  88.                         redoitem.setText("Redo");
  89.                 }
  90.         }// end of updateMenu()
  91.  
  92.         public void showDE(DocumentEvent de) {
  93.                 StringBuffer debuf = new StringBuffer(100);
  94.                 debuf.append(de.getType());
  95.                 debuf.append("Offset:");
  96.                 debuf.append(de.getOffset());
  97.                 debuf.append("Length:");
  98.                 debuf.append(de.getLength());
  99.  
  100.                 Element Eroot = jta.getDocument().getDefaultRootElement();
  101.                 DocumentEvent.ElementChange Echange = de.getChange(Eroot);
  102.                 if (Echange == null) {
  103.                         debuf.append("(No Element Change)");
  104.                 } else {
  105.                         debuf.append("Element Change:index");
  106.                         debuf.append("Echange.getIndex()");
  107.                 }
  108.                 debuf.append("\n");
  109.                 message.append(debuf.toString());
  110.         }
  111.  
  112.         public void changedUpdate(DocumentEvent de) {
  113.                 showDE(de);
  114.         }
  115.  
  116.         public void insertUpdate(DocumentEvent de) {
  117.                 showDE(de);
  118.         }
  119.  
  120.         public void removeUpdate(DocumentEvent de) {
  121.                 showDE(de);
  122.         }
  123.  
  124.         public static void main(String[] args) {
  125.                 JFrame f = new JTextArea5();
  126.                 f.addWindowListener(new WindowAdapter() {
  127.                         public void windowClosing(WindowEvent e) {
  128.                                 System.exit(0);
  129.                         }
  130.                 });
  131.                 f.show();
  132.         }
  133. }

回复 "JTextArea的事件处理2"

这儿你可以回复上面这条便签

captcha