我已经制作了UI /编辑器,您可以在下面的图片中看到。文本显示为StyledText
s。黑色线条是自定义边框,实际上是Label
,其上绘制有线条。SWT MouseDown事件对于自定义选择控件太占优势
现在我的目标是提供一个选择,允许用户选择Control
s到删除或者添加一些给他们。第二张图显示了一个示例选择。所以从各种各样的MouseEvent
开始,这比我最初想象的更复杂。
当MouseDown
事件上的任何Control
解雇我不能够跟踪任何其他Control
s表示用户希望选择,因为MouseMove
事件包含引发该事件MouseDown
,直到鼠标得到释放相同的控制。我需要追踪到正在进行的选择,以便为选定的Control
提供视觉反馈。下面的代码显示了一个演示行为的最小示例。
public class Tester {
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setText("Stackoverflow");
Composite comp = new Composite(shell, SWT.NONE);
comp.setLayout(new GridLayout(1, true));
SelectionListener listener = new SelectionListener();
StyledText text = new StyledText(comp, SWT.NONE);
text.setText("first text");
attachListener(text, listener);
text = new StyledText(comp, SWT.NONE);
text.setText("second text");
attachListener(text, listener);
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void attachListener(Control control, Listener listener) {
if(control != null && !control.isDisposed()){
control.addListener(SWT.MouseDown, listener);
control.addListener(SWT.MouseMove, listener);
control.addListener(SWT.MouseEnter, listener);
control.addListener(SWT.MouseUp, listener);
}
}
static class SelectionListener implements Listener {
Event lastEvent = null;
@Override
public void handleEvent(Event event) {
switch(event.type){
case SWT.MouseDown:
lastEvent = event;
break;
case SWT.MouseMove:
if(lastEvent != null){
if(event.widget == lastEvent.widget)
System.out.println("the same!!!");
else
System.out.println("not the same!!!");
}
break;
case SWT.MouseEnter:
//this also does not fire when MouseDown is fired
System.out.println("entering");
break;
case SWT.MouseUp:
lastEvent = null;
break;
}
}
}
}
因此,基本上我正在寻求帮助。也许有更好/更简单的方法来实现这一点。我还试图弄清楚swt是如何在支持多选的表格或其他控件中执行此操作。但是很难找到特定的代码,或者他们为诸如表格之类的nativ控件调用本地方法。所以如果有人有想法请分享。
想要通过将鼠标拖到段右侧来选择多个段? –
是的,通过指定的控件(标签和StyledTexts)。目前正在开发一种方法,当我离开某个控件时我自己发送一个MouseUp事件,之后所有其他事件再次通过。 – lolung