最近搞的超级编辑器,发现需要监测文本框内容变化,即监控用户输入。不过发现简单的addKeyListener无法监测用户输入了中文,输入英文或者空格就可以。
发现监测awt的文本框变化,还得用addInputMethodListener。
据资料显示Jtextpane和JText方法名称可能有所差别。
package com.javaer.examples.awt;
import java.awt.Dimension;
import java.awt.event.InputMethodEvent;
import java.awt.event.InputMethodListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.WindowConstants;
public class TextListen extends JFrame {
JTextPane textPane;
public TextListen(){
textPane = new JTextPane();
textPane.setBounds(0, 0, 300, 300);
textPane.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
System.out.println(textPane.getText());
if(e.getKeyCode()==32){
//按到特别的键,给特别的处理。
}
}
});
textPane.addInputMethodListener(new InputMethodListener(){
@Override
public void caretPositionChanged(InputMethodEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void inputMethodTextChanged(InputMethodEvent arg0) {
// TODO Auto-generated method stub
System.out.println("文本变化?");
}});
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setSize(new Dimension(500,500));
this.setVisible(true);
this.add(textPane);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TextListen tl = new TextListen();
}
}