我用如下代码实验在JTextArea中按Tab时光标前进的多少与在statusLabel中的列数情况,问题是当按一次Tab后,光标前进了4个单位,这样在statuslabel中的列数应该是在原来基础上加4吧,可它只加了1,这个问题是怎么回事?如何解决呢??我的猜测是在caretUpdate中并没有分析光标前进了几个单位,而只是按每按一次键来增加1个单位来进行的,那这个问题怎么解决呢?好像我自己也能按这个理解写出很笨拙的处理方法,那在Java自带的类中有没有更好的处理方法呢???package trysomething;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;public class TryCol { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame("TryCol");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = f.getContentPane();

final JTextArea t = new JTextArea();
c.add(t);

final JLabel l = new JLabel("Col:  " + " Row: ");
c.add(l,BorderLayout.SOUTH);

t.addCaretListener(new CaretListener(){ public void caretUpdate(CaretEvent e) {
// TODO Auto-generated method stub
//String tContent = t.getText();
int col = 0,row = 0;

try {
col = e.getDot()
- t.getLineStartOffset(t
.getLineOfOffset(e.getDot()))+1;
row = t.getLineOfOffset(e.getDot())+1;
} catch (Exception ex) {
// TODO: handle exception
ex.printStackTrace();
}

//String col;
l.setText("Col: " + col + " Row: " + row);
}

});
t.setCaretPosition(0);
t.setCaretColor(Color.BLUE);

f.setBounds(100,100,250,250);
f.setVisible(true);
}}谢谢,先!