我正在尝试在我的应用程序中使用ListView,它必须在Windows平板电脑上运行。问题是,要在ListView上选择多个项目,用户必须按下CTRL键,这在平板电脑上是不可能的。
所以我的问题是:有没有办法在ListView中选择多个项目,只需点击它就可以了?
答案 0 :(得分:1)
您可以过滤普通鼠标点击事件并将其转换为 Ctrl +单击。实际上要快捷方式+单击,因为快捷键可能会在应用程序运行的平台上有所不同。
EventHandler<MouseEvent> eventHandler = ( event ) ->
{
if ( !event.isShortcutDown() )
{
Event.fireEvent( event.getTarget(), cloneMouseEvent( event ) );
event.consume();
}
};
listview.getSelectionModel().setSelectionMode( SelectionMode.MULTIPLE );
listview.addEventFilter( MouseEvent.MOUSE_PRESSED, eventHandler );
listview.addEventFilter( MouseEvent.MOUSE_RELEASED, eventHandler );
其中cloneMouseEvent是
private MouseEvent cloneMouseEvent( MouseEvent event )
{
switch (Toolkit.getToolkit().getPlatformShortcutKey())
{
case SHIFT:
return new MouseEvent(
event.getSource(),
event.getTarget(),
event.getEventType(),
event.getX(),
event.getY(),
event.getScreenX(),
event.getScreenY(),
event.getButton(),
event.getClickCount(),
true,
event.isControlDown(),
event.isAltDown(),
event.isMetaDown(),
event.isPrimaryButtonDown(),
event.isMiddleButtonDown(),
event.isSecondaryButtonDown(),
event.isSynthesized(),
event.isPopupTrigger(),
event.isStillSincePress(),
event.getPickResult()
);
case CONTROL:
return new MouseEvent(
event.getSource(),
event.getTarget(),
event.getEventType(),
event.getX(),
event.getY(),
event.getScreenX(),
event.getScreenY(),
event.getButton(),
event.getClickCount(),
event.isShiftDown(),
true,
event.isAltDown(),
event.isMetaDown(),
event.isPrimaryButtonDown(),
event.isMiddleButtonDown(),
event.isSecondaryButtonDown(),
event.isSynthesized(),
event.isPopupTrigger(),
event.isStillSincePress(),
event.getPickResult()
);
case ALT:
return new MouseEvent(
event.getSource(),
event.getTarget(),
event.getEventType(),
event.getX(),
event.getY(),
event.getScreenX(),
event.getScreenY(),
event.getButton(),
event.getClickCount(),
event.isShiftDown(),
event.isControlDown(),
true,
event.isMetaDown(),
event.isPrimaryButtonDown(),
event.isMiddleButtonDown(),
event.isSecondaryButtonDown(),
event.isSynthesized(),
event.isPopupTrigger(),
event.isStillSincePress(),
event.getPickResult()
);
case META:
return new MouseEvent(
event.getSource(),
event.getTarget(),
event.getEventType(),
event.getX(),
event.getY(),
event.getScreenX(),
event.getScreenY(),
event.getButton(),
event.getClickCount(),
event.isShiftDown(),
event.isControlDown(),
event.isAltDown(),
true,
event.isPrimaryButtonDown(),
event.isMiddleButtonDown(),
event.isSecondaryButtonDown(),
event.isSynthesized(),
event.isPopupTrigger(),
event.isStillSincePress(),
event.getPickResult()
);
default: // well return itself then
return event;
}
}