我需要一些帮助,因为我非常喜欢。
我试图在这里制作的程序,曾经用于我的意图,但是当我试图让我的代码更具可读性时,我遇到了关于ActionListener
的问题。
在我创建一个新类以使用所有方法之前,我使用button.addActionListener(this);
并且它工作得很好。现在我想把东西放在一个单独的课堂上,我完全不知道该怎么做。
所以我想我的问题是,我怎样才能让ActionListener
在这样的情况下工作,或者我在这里做错了什么?
以下是我认为相关的部分代码(大部分已编辑完成):
//Class with frame, panels, labels, buttons, etc.
class FemTreEnPlus {
FemTreEnPlus() {
//Components here!
//Then to the part where I try to add these listeners
cfg.addActionListener();
Exit.addActionListener();
New.addActionListener();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run(){
//Start the Program in the FemTreEnPlus Class
new FemTreEnPlus();
}
});
}
这是带框架的类,这是另一个类,带有方法
public class FemTreEnMethods extends FemTreEnPlus implements ActionListener {
//Perform Actions!
public void actionPerformed(ActionEvent ae){
if(ae.getSource() == cfgButton){
configureSettings();
}
if(ae.getSource() == newButton){
newProject();
}
if(ae.getSource() == exitButton){
exitProgram();
}
}
//All methods are down here
提前感谢您的帮助。
答案 0 :(得分:3)
尽管教程的示例显示了以您的方式实现的侦听器的使用,但恕我直言更有用的是使用匿名内部类来实现侦听器。例如:
cfgButton.addActionListener(new ActionListener() {
@Override
public void actionPerfomed(ActionEvent e) {
// do the stuff related to cfgButton here
}
};
newButton.addActionListener(new ActionListener() {
@Override
public void actionPerfomed(ActionEvent e) {
// do the stuff related to newButton here
}
};
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerfomed(ActionEvent e) {
// do the stuff related to exitButton here
}
};
这种方法具有以下优点:
if
块来询问谁是该事件的来源。当然这取决于具体情况。如果一组组件(例如单选按钮或复选框)的行为相同,那么只有一个侦听器并使用EventObject.getSource()来处理事件的源是有意义的。建议使用此方法here并举例说明here。请注意,这些示例也以这种方式使用匿名内部类:
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// do something here
}
};