我有以下匿名类
box = new JComboBox(filename);
...
box.addItemListener(
new ItemListener() {
public void itemStateChanged(ItemEvent event )
{
if (event.getStateChange() == ItemEvent.SELECTED)
picture.setIcon(pics[box.getSelectedIndex()]);
}
}
);
我正在尝试使用以下内容将其转换为具体类:
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
}
关于我做错的任何想法? 我得到的错误说它找不到符号ItemListener
答案 0 :(得分:2)
由于ItemListener
是interface
,您需要使用关键字implements
。
class Handler implements ItemListener {
另外,当我创建我的监听器时,我通常会将它们设为私有成员变量,以防我想重用它们。
private ItemListener setIconHandler = new ItemListener() {
public void itemStateChanged (ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
picture.setIcon(pics[box.getSelectedIndex()]);
}//end if
}//end itemstatechanged
};
通过这种方式,您可以重用侦听器,而不必定义只使用一次或两次的类。
另外,为了完整性,您需要修复导入。这was not caught by me,但其他人回答了这个问题。您应该使用import java.awt.event.ItemListener;
代替import java.awt.Event.*;
。
答案 1 :(得分:2)
您还需要为ItemListener和ItemEvent添加import语句。
答案 2 :(得分:0)
不应该是implements ItemListener
吗?
您需要通过以下方式导入:
import java.awt.event.ItemListener;
import java.awt.Event.*;
在java.awt中导入类Event的内部类。
答案 3 :(得分:0)
ItemListener
是一个界面,因此您需要implement
,而不是extend