Java 检测文本控件中的插入符号移动
我觉得自己很愚蠢,但当用户在Java 检测文本控件中的插入符号移动,java,swt,listener,caret,Java,Swt,Listener,Caret,我觉得自己很愚蠢,但当用户在文本或样式文本输入字段中更改插入符号时,我似乎无法通知听众。我尝试了SelectionListener以及CaretListener(仅限于StyledText),但当我使用箭头键在多行输入字段中移动插入符号时,没有一个被可靠调用。CaretListener有时会被调用,但是,例如,在您选择所有文本并点击Del收听SWT.MouseUp和SWT.KeyUp之后,就不会被调用了: public static void main(String[] args) {
文本
或样式文本
输入字段中更改插入符号时,我似乎无法通知听众。我尝试了SelectionListener
以及CaretListener
(仅限于StyledText),但当我使用箭头键在多行输入字段中移动插入符号时,没有一个被可靠调用。CaretListener
有时会被调用,但是,例如,在您选择所有文本并点击Del
收听SWT.MouseUp
和SWT.KeyUp
之后,就不会被调用了:
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Text text = new Text(shell, SWT.BORDER);
Listener listener = new Listener()
{
@Override
public void handleEvent(Event arg0)
{
System.out.println("Event");
}
};
text.addListener(SWT.KeyUp, listener);
text.addListener(SWT.MouseUp, listener);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
您可以使用static
变量跟踪旧插入符号位置,并将其与侦听器中的当前位置进行比较
另一个非常方便的事件是SWT.Verify
,它在所包含的文本发生更改时调用。请注意,这不会考虑鼠标的位置变化