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

来自 , 2019-04-23, 写在 Java, 查看 116 次.
URL http://www.code666.cn/view/4b025079
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4.  /*由于会使用到复原和事件驱动功能,因此需要将javax.swing.undo和javax.swing.event两个package包含进来
  5.   */
  6. import javax.swing.undo.*;
  7. import javax.swing.event.*;
  8. /*JTextArea4类继承JFrame类并实作UndoableEditListener interface.实作UndoableEditListener interface就必须要编写其中的
  9.  *undoableEditHappened().
  10.  */
  11. public class JTextArea4 extends JFrame implements UndoableEditListener{
  12.  
  13.     private UndoableEdit edit;
  14.     private JTextArea    jta;
  15.     private JTextArea    message;
  16.     private JMenuItem    undoitem;
  17.     private JMenuItem    redoitem;
  18.    
  19.     public JTextArea4(){
  20.        
  21.         super("JTextArea4");
  22.         jta = new JTextArea();
  23.         jta.getDocument().addUndoableEditListener(this);//将JTextArea加入UndoableEditListener.
  24.  
  25.         message = new JTextArea();
  26.         message.setEditable(false);//利用setEditable()方法将另一个JTextArea设置为不可编辑.
  27.  
  28.         JPanel p1 = new JPanel();
  29.         p1.setLayout(new GridLayout(1,1));
  30.         p1.setBorder(BorderFactory.createTitledBorder("Edit Area"));  
  31.         p1.add(new JScrollPane(jta));
  32. //--begin:分别将两个JTextArea通过JPanel放到JFrame中。
  33.         JPanel p2 = new JPanel();
  34.         p2.setLayout(new GridLayout(1,1));
  35.         p2.setBorder(BorderFactory.createTitledBorder("Message"));  
  36.         p2.add(new JScrollPane(message));        
  37.        
  38.         getContentPane().setLayout(new GridLayout(2,1));
  39.         getContentPane().add(p1);
  40.         getContentPane().add(p2);
  41. //--end        
  42.      //建立目录菜单并放置到JFrame中.
  43.         JMenuBar bar  = new JMenuBar();
  44.         JMenu theMenu = new JMenu("Edit");
  45.         undoitem = new JMenuItem("Undo");
  46.         redoitem = new JMenuItem("Redo");
  47.         theMenu.add(undoitem);
  48.         theMenu.add(redoitem);
  49.         bar.add(theMenu);
  50.         updateMenuItem();//构造目录菜单
  51.        
  52.         setJMenuBar(bar);
  53.         setSize(300,300);
  54.        
  55.         //采用inner class方式,分别构造菜单选项被点选后的运行操作。分别调用undo(),redo()方法来完成.
  56.         undoitem.addActionListener(new ActionListener(){
  57.                 public void actionPerformed(ActionEvent ev){
  58.                         edit.undo();
  59.                         updateMenuItem();//运行undo功能
  60.                         message.append("- Undo -\n");
  61.                 }      
  62.         });
  63.  
  64.         redoitem.addActionListener(new ActionListener(){
  65.                 public void actionPerformed(ActionEvent ev){
  66.                         edit.redo();
  67.                         updateMenuItem();//运行redo功能
  68.                         message.append("- Redo -\n");
  69.                 }      
  70.         });    
  71.     }//end of JTextArea4()
  72.  
  73.     public void undoableEditHappened(UndoableEditEvent ev){
  74.         StringBuffer buf = new StringBuffer(200);
  75.          /*当用户在Text Area中有所操作时,就可以用getEdit()方法取得UndoableEdit对象,此对象纪录着刚刚用户的操作,因
  76.           *此可由些对象的undo()或redo()达到取消或复原的功能.
  77.           */
  78.         edit = ev.getEdit();
  79.         buf.append("undoableEdit:");
  80.         buf.append(edit.getPresentationName());
  81.         buf.append("\n");
  82.         message.append(buf.toString());
  83.         updateMenuItem();
  84.     }//end of undoableEditHappened()
  85. //判断是否此时是否可以运行undo或redo的功能,并且改变目录菜单的状态值.
  86.     public void updateMenuItem(){
  87.        
  88.         if (edit != null){
  89.                   undoitem.setEnabled(edit.canUndo());
  90.                   redoitem.setEnabled(edit.canRedo());
  91.                   undoitem.setText(edit.getUndoPresentationName());
  92.                   redoitem.setText(edit.getRedoPresentationName());
  93.             }else{
  94.                   undoitem.setEnabled(false);
  95.                   redoitem.setEnabled(false);
  96.                   undoitem.setText("Undo");
  97.                   redoitem.setText("Redo");
  98.         }
  99.     }//end of updateMenu()
  100.  
  101.     public static void main(String args[])    {
  102.  
  103.         JFrame f = new JTextArea4();
  104.         f.addWindowListener(new WindowAdapter() {            
  105.                 public void windowClosing(WindowEvent e) {                    
  106.                         System.exit(0);            
  107.                 }        
  108.         });
  109.         f.show();
  110.     }//end of main()
  111. }//end of class JTextArea4

回复 "JTextArea事件处理"

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

captcha