Brian
Brian

Reputation: 11

Java: Parenthesized Class Name when Creating Object Instance

In the java code:

// Define ActionListener

ActionListener actionListener = new ActionListener() {

public void actionPerformed(ActionEvent actionEvent) {

        JButton button = **(JButton)actionEvent.getSource();**
        int red = random.nextInt(255);
        int green = random.nextInt(255);
        int blue = random.nextInt(255);
        button.setBackground(new Color(red, green, blue));

    }
};

What does the highlighted (between ** and **) code do?

I find it extremely hard to research on the subject as I do not know what search terms to use. :o

Hope anyone can help. TIA

Upvotes: 1

Views: 178

Answers (5)

unR
unR

Reputation: 1318

It's called class "casting". actionEvent.getSource() can return anything not only a JButton but also other widgets. So they decided "lets return Object because everything fits in there, and let the developer tell java what he expects" by preceeding it with (JButton) you are saying "I'm sure the source of the action event is a JButton and i want to acces it like a JButton"

Upvotes: 0

Waldheinz
Waldheinz

Reputation: 10487

The interesting thing is the (JButton) which is called a cast. You can use casts if you are absolutely sure that an Object of class A (called "foo" in the following) you've been given is indeed an instance of class B, then you can just write

B bar = (B) foo;

and then use the bar variable as you like. But be aware that if foo is not really an instance of B, the runtime will throw a ClassCastException. You might also be interested in reading up on the instanceof keyword.

Upvotes: 0

solendil
solendil

Reputation: 8458

The ActionEvent object represents a user action. According to your code, this action has been performed on a JButton. This object has a getSource() method that sends back the object that originated the event. However, since anything can send such events, getSource() sends back an untyped Object. You need to cast it back to its original type (Jbutton) to be able to use this source (in this cas set its background).

Check http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

Upvotes: 0

acostache
acostache

Reputation: 2275

It gets the source of your action which it assumes to be a JButton and casts the source of your action event to the JButton class.

Upvotes: 0

Kevin
Kevin

Reputation: 5694

It's casting the object returned by actionEvent.getSource() to a JButton.

You can read up on some information over here and here.

Upvotes: 6

Related Questions