We help IT Professionals succeed at work.

Forwarding an event in java

qasinformatik
on
477 Views
Last Modified: 2011-04-14
Hello Experts,

I need some help with event handling in Java.

button.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
      QMessageButton userButton =  (QMessageButton)e.getSource();
      String messageNo = userButton.getMessageNo();
      System.out.println("Userbutton klicked!" + messageNo);
                // i want to forward the event to the JTextPane in which the QMessageButton is
}
});


--> how do I simply forward all events from the Button to its parent after handling them in Button?
Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2016

Commented:
>>how do I simply forward all events from the Button to its parent after handling them in Button?

Forward? What do you want to do with it? You can just pass 'e' to another method
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
you can't, you'd instead add your parent also as a listener.

Author

Commented:
My parent (the JTextPane) has a MouseListener.

It is called everywhere - but not if I click the Button.
I want that the ActionPerformed of the Button is called and then the mouseClicked of the JTextPane is called.

The reason why I wanted to do that is that I need to set the caretPosition in the JTextPane to where the Button is placed in the JTextPane.
But when I try to find out the position of the Button in the JTextPane I always get (0/0) for the x- and y-coordinate.

so I created a mouseListener for the JTextPane where I get the position in the JTextPane where the user clicked --> I can find out the Position and set the CaretPosition
--> thats why I need to forward the event to the JTextPane even when the Button is clicked
CERTIFIED EXPERT
Top Expert 2016

Commented:
If you want to get the coordinates on the button in terms of the JTextPane, add a MouseListener to the button and use

SwingUtilities.convertMouseEvent(Component source, MouseEvent sourceEvent, Component destination)
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
>> after handling them in Button

So the parent also needs to handle the event? In that case, it should perhaps also register itself as an action-listener for the button.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
> The reason why I wanted to do that is that I need to set the caretPosition in the JTextPane to where the Button is placed in the JTextPane.

you can just use button.getLocation() in that case.
why have you get a button inside your text pane?

Author

Commented:
@ mayankeagle
how can it register itself as an action-listener for the button?
can u give a code-example?

@objects:
button.getLocation() returns 0/0 --> no idea why.. perhaps a special layout

--> its a chat application --> i need a button inside the text pane to delete the specific message (works already)

@CEHJ
SwingUtilities.convertMouseEvent(Component source, MouseEvent sourceEvent, Component destination)
--> didn't work
button.addMouseListener(new MouseListener(){
      public void mouseClicked(MouseEvent e){
            
      QMessageButton userButton =  (QMessageButton)e.getSource();
      String messageNo = userButton.getMessageNo();
      System.out.println("Userbutton klicked!" + messageNo);
      SwingUtilities.convertMouseEvent(userButton, e, MessageMask.getInstance().getMessagesJTP());
      Point p = e.getPoint();
      System.out.println("DelButton-Location: " + p.getX() + ", " + p.getY());
--> I get the coordinates inside the button instead of the coordinates inside the messagesJTP
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
> button.getLocation() returns 0/0 --> no idea why.. perhaps a special layout

because thats where it is located I'd say :)
the corrds are relative to its immediate parent

to get the coords relative to another component then use

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/SwingUtilities.html#convertPoint(java.awt.Component,%20java.awt.Point,%20java.awt.Component)

> --> its a chat application --> i need a button inside the text pane to delete the specific message (works already)

Doesn't need to be inside the text pane to achiev e that, it can be anywhere in your hierarchy.


CERTIFIED EXPERT
Top Expert 2016
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
CEHJ

Thanks for your solution. It worked fine.
CERTIFIED EXPERT
Top Expert 2016

Commented:
:-)
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
easier to just add the listener to the parent, then no conversion is necesary
and also less coupling.
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.