1

在java代码中:

// 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));

    }
};

突出显示(介于**和之间**)的代码有什么作用?

我发现研究这个主题非常困难,因为我不知道使用什么搜索词。:o

希望任何人都可以提供帮助。TIA

4

5 回答 5

6

它将返回的对象转换actionEvent.getSource()JButton.

你可以在这里这里阅读一些信息。

于 2011-05-31T09:25:58.433 回答
0

ActionEvent 对象表示用户操作。根据您的代码,此操作已在 JButton 上执行。该对象有一个 getSource() 方法,该方法将发起该事件的对象发回。但是,由于任何东西都可以发送此类事件,因此 getSource() 会返回一个无类型的对象。您需要将其转换回其原始类型(Jbutton)才能使用此源(在此案例中设置其背景)。

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

于 2011-05-31T09:28:37.613 回答
0

有趣的是,(JButton)它被称为cast。如果您绝对确定给定的 A 类对象(以下称为“foo”)确实是 B 类的实例,则可以使用强制转换,那么您可以编写

B bar = (B) foo;

然后根据需要使用 bar 变量。但请注意,如果 foo 不是 B 的真正实例,则运行时将抛出ClassCastException. 您可能也有兴趣阅读instanceof关键字。

于 2011-05-31T09:29:01.400 回答
0

它被称为类“铸造”。actionEvent.getSource() 不仅可以返回 JButton,还可以返回其他小部件。所以他们决定“让我们返回对象,因为一切都适合在那里,并让开发人员告诉 java 他期望什么”通过在它前面加上 (JButton) 你说“我确定动作事件的来源是一个 JButton 我想要像 JButton 一样访问它”

于 2011-05-31T09:29:31.127 回答
0

它获取假定为 JButton 的动作源,并将动作事件的源转换为 JButton 类。

于 2011-05-31T09:26:38.207 回答