@Override
    public Interactable.Result keyboardInteraction(Key key)
    {
        try {
            switch(key.getKind())
            {
                case ArrowDown:
                    return Result.NEXT_INTERACTABLE_DOWN;
                    
                case Tab:
                case ArrowRight:
                    return Result.NEXT_INTERACTABLE_RIGHT;

                case ArrowUp:
                    return Result.PREVIOUS_INTERACTABLE_UP;
                    
                case ReverseTab:
                case ArrowLeft:
                    return Result.PREVIOUS_INTERACTABLE_LEFT;

                case Enter:
                    onActivated();
                    return Result.EVENT_HANDLED;

                default:
                    if(key.getCharacter() == ' ' || key.getCharacter() == 'x') {
                        onActivated();
                        return Result.EVENT_HANDLED;
                    }
                    return Result.EVENT_NOT_HANDLED;
            }
        }
        finally {
            invalidate();
        }
    }