JAVA中changedUpdate是用来干嘛的?

package example9_9;

import java.awt.*;
import javax. swing.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Arrays;
class WindowDocument extends JFrame {
JTextArea inputText, showText;
JMenuBar menubar;//菜单条
JMenu menu; //菜单
JMenuItem itemCopy, itemCut, itemPaste;//菜单项
TextListener textChangeListener; //inputText 的监视器
HandleListener handleListener; //itemCopy itemCut, itemPaste的监视器
WindowDocument () {
init() ;
setLayout (new FlowLayout());//FlowLayout水平布局
setVisible (true) ;
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE) ;
}
void init() {
inputText = new JTextArea(15,20);
showText = new JTextArea (15,20) ;
showText . setLineWrap(true) ; //文本自动回行
showText .setWrapStyleWord(true); //文本区以单词为界自 动换行
menubar = new JMenuBar () ;
menu = new JMenu ("编辑");
itemCopy = new JMenuItem("复制 (C)");
itemCut = new JMenuItem("剪切 (T)");
itemPaste = new JMenuItem("粘贴 (P)");
itemCopy . setAccelerator (KeyStroke . getKeyStroke('e'));//设置快捷方式
itemCut . setAccelerator (KeyStroke. getKeyStroke('t'));
itemPaste. setAccelerator (KeyStroke . getKeyStroke('p'));//设置快捷方式
itemCopy. setActionCommand ("copy");
itemCut . setActionCommand ("cut");
itemPaste . setActionCommand ("paste") ;
menu. add (itemCopy) ;
menu .add (itemCut) ;
menu .add (itemPaste) ;
menubar . add (menu) ;
setJMenuBar (menubar) ;
add (new JScrollPane (inputText));//滚动窗格
add (new JScrollPane (showText)) ;//滚动窗格
textChangeListener = new TextListener() ;
handleListener = new HandleListener() ;
textChangeListener . setInputText (inputText) ;
textChangeListener . setShowText (showText) ;
handleListener . setInputText (inputText);
handleListener . setShowText (showText) ;
(inputText . getDocument () ) . addDocumentListener (textChangeListener) ;//向文档注册监视器
itemCopy.addActionListener (handleListener) ;//向菜单项注册监视器
itemCut. addActionListener (handleListener);
itemPaste. addActionListener (handleListener) ;
}
}

class TextListener implements DocumentListener {
JTextArea inputText, showText ;
public void setInputText (JTextArea text) {
inputText = text;
}
public void setShowText (JTextArea text){
showText = text;
}
public void changedUpdate (DocumentEvent e) {
String str= inputText .getText() ;//空格、数字和符号(!"#$气&" ()*+,-./:;<=>?@[]^ 11}~)组成的正则表达式
String regex="[\s\d\p{Punct}]+";
String words[]=str.split (regex) ;
Arrays.sort (words) ;//按字典序从小到大排序
showText.setText (null) ;
for(int i=0;i<words. length;i++)
showText . append (words[i]+",");
}
public void removeUpdate (DocumentEvent e) {
changedUpdate(e) ;
}
public void insertUpdate (DocumentEvent e) {
changedUpdate(e) ;
}
}
class HandleListener implements ActionListener {
JTextArea inputText, showText;
public void setInputText (JTextArea text){
inputText = text;
}
public void setShowText (JTextArea text) {
showText = text;
}
public void actionPerformed (ActionEvent e) {
String str=e.getActionCommand ();
if(str .equals ("copy"))
showText.copy();
else if (str .equals ("cut"))
showText.cut() ;
else if (str.equals ("paste"))
inputText.paste();
}
}

public class Example9_9 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    WindowDocument win=new WindowDocument () ;
    win. setBounds (100, 100,590,500) ;
    win.setTitle("排序单词");

}

}

当有数据发生变化时,用来更新组件的