@Override
        public void onJoyAxisEvent(JoyAxisEvent evt) {
            Float last = lastValues.remove(evt.getAxis());
            float value = evt.getValue();
                    
            // Check the axis dead zone.  InputManager normally does this
            // by default but not for raw events like we get here.
            float effectiveDeadZone = Math.max(inputManager.getAxisDeadZone(), evt.getAxis().getDeadZone());
            if( Math.abs(value) < effectiveDeadZone ) {
                if( last == null ) {
                    // Just skip the event
                    return;
                }
                // Else set the value to 0
                lastValues.remove(evt.getAxis());
                value = 0;
            }         
            setViewedJoystick( evt.getAxis().getJoystick() );            
            gamepad.setAxisValue( evt.getAxis(), value );
            if( value != 0 ) {
                lastValues.put(evt.getAxis(), value);
            } 
        }
Easier to watch for all button and axis events with a raw input listener.
jme3-examples/src/main/java/jme3test/input/TestJoystick.java