我有一个这类org.eclipse.swt.widgets.Text
的类。它存在于我正在开发的eclipse插件中。我想处理用户从此字段中选择文本的事件。这是......在聚焦时,他们点击一些文本并向左或向右拖动以选择文本。选择此文本时,就是我需要触发我的事件。
我无法找到合适的听众来满足我的需要。
答案 0 :(得分:8)
我认为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 ();
}
如果用户真的选择了某些内容,此代码将仅打印选择。如果它是一个没有选择的鼠标按键,则不会发生任何事情。
您可能希望将两者合并在一个侦听器中以节省空间。
答案 1 :(得分:1)
为了获得文本选择,您应该考虑使用org.eclipse.swt.custom.StyledText。您需要注册一个选择监听器。见下文:
public void addSelectionListener(SelectionListener listener)
添加选择侦听器。当用户更改选择时,窗口小部件将发送选择事件。 调用widgetSelected时,事件x和y字段包含选择的开始和结束符号索引。不为StyledTexts调用widgetDefaultSelected。