Hi,
I am facing a behavior that I can't quite understand and although I have worked 
around it by duplicating code, I am curious as to the reasons of this behavior.
In the main dialog of an extension that I have written (in Java), I tie several 
controls to the same event handler (whether the event is from the keyboard or 
the mouse). In some handlers, I happen to accomplish different actions 
depending on the source of the event: a button labeled "Close" will trigger a 
call to the 'close' method of a worker object, "Tag" will call another method, 
etc.
Identifying the source control was done by a method – with this signature: 
public static String getActionEventSourceName(ActionEvent event) – which gets 
me the name of the control.

Up until today, I used to need which control was a source only for ActionEvent 
objects, triggered from buttons. Starting from today, I also need this 
identification of the source for KeyEvent objects.The hierarchy of event 
classes involved is this:   
   - com.sun.star.lang.EventObject > com.sun.awt.ActionEvent
   - com.sun.star.lang.EventObject > com.sun.awt.InputEvent > 
com.sun.star.awt.KeyEvent

Using this hierarchy information, I thought that instead of making the _event_ 
parameter an ActionEvent, I could just go higher in the hierarchy and upcast 
the event to an EventObject; that way, I could use a single method instead of 
duplicating the code for ActionEvent and KeyEvent.
The problem is that when the parameter type is EventObject, the instruction 
below stops the execution flow (meaning that the target method is not called at 
all) and I get no errors or warnings of any sorts in the NetBeans debugger 
output:String sName = EventUtils.getActionEventSourceName(actionEvent);

Given that an ActionEvent object is an EventObject, why does changing the type 
of the argument in getActionEventSourceName cause the call to fail, silently? 
I'm suspecting that downcasting and upcasting don't work as I think they do.
If someone could shed some light on this mystery, I'd be grateful. Thank you.

Reply via email to