在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));
}
};
突出显示的内容(**
和**
)代码之间有什么作用?
我觉得很难研究这个主题,因为我不知道使用什么搜索词。 :○
希望任何人都可以提供帮助。 TIA
答案 0 :(得分:6)
答案 1 :(得分:0)
它获取你的行动的源,它假定它是一个JButton并将你的动作事件的源转换为JButton类。
答案 2 :(得分:0)
ActionEvent对象表示用户操作。根据您的代码,此操作已在JButton上执行。该对象有一个getSource()方法,它发送回发起事件的对象。但是,由于任何东西都可以发送此类事件,因此getSource()会发回一个无类型的Object。您需要将其强制转换为原始类型(Jbutton)才能使用此源(在此cas设置其背景中)。
检查http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()
答案 3 :(得分:0)
有趣的是(JButton)
被称为 cast 。如果你完全确定你给出的A类对象(下面称为“foo”)确实是B类的一个实例,那么你可以使用强制转换,那么你就可以写
B bar = (B) foo;
然后根据需要使用bar变量。但请注意,如果foo实际上不是B的实例,则运行时将抛出ClassCastException
。您可能还有兴趣阅读instanceof关键字。
答案 4 :(得分:0)
它被称为“铸造”类。 actionEvent.getSource()不仅可以返回任何JButton,还可以返回其他小部件。所以他们决定“让我们返回Object,因为一切都适合那里,让开发人员告诉java他期望的东西”,然后用它来表示(JButton)你说“我确定动作事件的来源是JButton而我想要像JButton“
那样访问它