[英]java : converting anonymous inner class to concrete class
I have the following anonymous class 我有以下匿名课程
box = new JComboBox(filename);
...
box.addItemListener(
new ItemListener() {
public void itemStateChanged(ItemEvent event )
{
if (event.getStateChange() == ItemEvent.SELECTED)
picture.setIcon(pics[box.getSelectedIndex()]);
}
}
);
I'm trying to convert this to a concrete class with the following: 我正在尝试使用以下内容将其转换为具体类:
import java.awt.*;
import java.awt.Event.*;
import javax.swing.*;
public class Gui extends JFrame {
...
public Gui () {
box.addItemListener(new Handler());
...
add(box);
}
class Handler extends ItemListener {
public void itemStateChanged (ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
picture.setIcon(pics[box.getSelectedIndex()]);
}//end if
}//end itemstatechanged
}
Any ideas on what I'm doing wrong? 关于我做错了什么的任何想法? the error i get says it can't find the symbol ItemListener
我得到的错误说它找不到符号ItemListener
Since ItemListener
is an interface
, you need to use the keyword implements
. 由于
ItemListener
是一个interface
,因此您需要使用关键字implements
。
class Handler implements ItemListener {
Also, when I create my listeners I usually make them a private member variable in case I want to reuse them. 此外,当我创建我的监听器时,我通常会将它们作为私有成员变量,以防我想重用它们。
private ItemListener setIconHandler = new ItemListener() {
public void itemStateChanged (ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
picture.setIcon(pics[box.getSelectedIndex()]);
}//end if
}//end itemstatechanged
};
This way you can reuse the listener, and you don't have to define a class that you are only going to use once or twice. 这样您就可以重用侦听器,而不必定义只使用一次或两次的类。
Also, for completeness, you need to fix your imports. 此外,为了完整性,您需要修复导入。 This was not caught by me , but by other people answering the question.
这不是 我抓住的 ,而是其他人回答这个问题。 You should use
import java.awt.event.ItemListener;
你应该使用
import java.awt.event.ItemListener;
instead of import java.awt.Event.*;
而不是
import java.awt.Event.*;
. 。
您还需要为ItemListener和ItemEvent添加import语句。
Shouldn't it be implements ItemListener
? 它不应该是
implements ItemListener
吗?
And you'll need to import it via: 你需要通过以下方式导入它:
import java.awt.event.ItemListener;
import java.awt.Event.*;
imports the inner classes of the class Event in java.awt. 在java.awt中导入类Event的内部类。
ItemListener
是一个接口,因此您需要implement
它,而不是从它extend
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.