我有这种类型的类org.eclipse.swt.widgets.Text
。它位于我正在开发的 Eclipse 插件中。我想处理用户从该字段中选择文本的事件。那就是……在集中注意力时,他们单击某些文本并向左或向右拖动以选择文本。选择此文本时,即是我需要触发事件的时候。
我仍然无法找到合适的听众来满足我的需要。
我有这种类型的类org.eclipse.swt.widgets.Text
。它位于我正在开发的 Eclipse 插件中。我想处理用户从该字段中选择文本的事件。那就是……在集中注意力时,他们单击某些文本并向左或向右拖动以选择文本。选择此文本时,即是我需要触发事件的时候。
我仍然无法找到合适的听众来满足我的需要。
我认为SWT.MouseUp
是您正在寻找的事件。如果要检查“箭头键和移位选择”,请同时收听SWT.KeyUp
并检查keyCode
事件:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
Text text = new Text(shell, SWT.BORDER);
text.setText("BLABLABLA");
text.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event event) {
Text text = (Text) event.widget;
String selection = text.getSelectionText();
if(selection.length() > 0)
{
System.out.println("Selected text: " + selection);
}
}
});
text.addListener(SWT.KeyUp, new Listener() {
@Override
public void handleEvent(Event event) {
Text text = (Text) event.widget;
String selection = text.getSelectionText();
if(selection.length() > 0 && event.keyCode == SWT.SHIFT)
{
System.out.println("Selected text: " + selection);
}
}
});
shell.pack();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
如果用户真的选择了某些东西,此代码只会打印选择。如果是没有选择的鼠标或键,则不会发生任何事情。
您可能希望将两者结合在一个侦听器中以节省空间。
为了获得文本选择,您应该考虑使用 org.eclipse.swt.custom.StyledText。您需要注册一个选择侦听器。见下文:
public void addSelectionListener(SelectionListener listener)
添加选择侦听器。当用户更改选择时,小部件会发送一个 Selection 事件。当 widgetSelected 被调用时,事件 x 和 y 字段包含选择的开始和结束插入符号索引。不为 StyledTexts 调用 widgetDefaultSelected。