I believe that you want Event.class.getDeclaredClasses().
import java.util.ArrayList;
import java.util.List;
public class Event {
    public static class MouseEvent extends Event {}
    public static class KeyboardEvent extends Event {}
    public static class NetworkEvent extends Event {}
    public static class NotAnEvent {}
public static List<Class<?>> getDeclaredEvents() {
        final Class<?>[] candidates = Event.class.getDeclaredClasses();
        final List<Class<?>> declaredEvents = new ArrayList<Class<?>>();
        for (final Class<?> candidate : candidates) {
            if (Event.class.isAssignableFrom(candidate)) {
                declaredEvents.add(candidate);
            }
        }
        return declaredEvents;
    }
    public static void main(final String args[]) {
        final List<Class<?>> events = Event.getDeclaredEvents();
        for (final Class<?> event : events) {
            System.out.println("event class name: '" + event.getName() + "'.");
        }
    }
}
Will give you the expected output:
event class name: 'Event$KeyboardEvent'.
event class name: 'Event$MouseEvent'.
event class name: 'Event$NetworkEvent'.
However, I think that you are looking for a more open scanning mechanism which does not limit itself to inner classes. Based on this question, it does not look like there is a straight-forward way to do this.
The Spring framework does something like this with its annotation scanning (see org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider), but their approach is not a straight-forward method call.