【发布时间】:2013-03-30 08:31:59
【问题描述】:
我觉得自己很愚蠢,但是当用户更改 Text 或 StyledText 输入字段中的插入符号时,我似乎无法通知听众。我试过SelectionListener 和CaretListener(仅限StyledText),但是当我使用箭头键在多行输入字段内移动插入符号时,没有一个可靠调用。 CaretListener 有时会被调用,但是,例如,在选择所有文本并点击 Del 之后不会调用。
【问题讨论】:
我觉得自己很愚蠢,但是当用户更改 Text 或 StyledText 输入字段中的插入符号时,我似乎无法通知听众。我试过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 变量跟踪旧的插入符号位置,并将其与 Listener 中的当前位置进行比较。
另一个非常方便的事件是SWT.Verify,只要包含的文本发生更改,就会调用它。请注意,这不会处理鼠标的位置变化。
【讨论】: