选择多个ListView项而不按CTRL(快捷键)

时间:2015-08-21 09:14:05

标签: javafx javafx-8

我正在尝试在我的应用程序中使用ListView,它必须在Windows平板电脑上运行。问题是,要在ListView上选择多个项目,用户必须按下CTRL键,这在平板电脑上是不可能的。

所以我的问题是:有没有办法在ListView中选择多个项目,只需点击它就可以了?

1 个答案:

答案 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;

    }
}