在我的代码中,我目前将所有ActionListener都作为Anonymous内部类,例如:
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//code here
}
}
现在,当代码不超过20行时,这对我来说感觉很好,但是超过20行时却感觉笨拙。 因此,我可以实现ActionListener并有一个方法
ActionPerformed(ActionEvent ae)
{
if ae.getSource() == item
{
// code here too
}
}
但是我无意在其他任何地方重用此代码...我也可以创建另一个类来处理此问题,但这并没有真正的帮助,因为我仍然希望使用在父类中实例化的变量。
我真正想做的是使用如下语法:
private void btnAction()
{
// do code
{
public static void main(String[] args)
{
btn.addActionListener(btnAction)
}
我觉得这看起来最好,因为我可以将事件隐藏在底部并专注于正在运行的项目的大部分。 这有可能实现吗?
使用Java 8,您可以执行以下操作:
btn.addActionListener(e -> btnAction());
从此处开始阅读有关lambda的更多信息: http : //www.oracle.com/technetwork/articles/java/architect-lambdas-part1-2080972.html
如果所有按钮都运行相同的代码,则可以定义一个(命名的)内部类来实现ActionListener并运行该代码,或者甚至可以使封闭的类成为ActionListener
并将其添加为所有按钮的动作侦听器,以便它的actionPerformed()
运行所有代码。
另一方面,如果每个按钮需要不同的操作,则可以像请求方法一样将不同的操作作为方法。 我建议您将事件传递给他们,以防您需要事件信息:
private void btnActionOK(ActionEvent e) {
// do code
}
private void btnActionBack(ActionEvent e) {
// do code
}
private void btnActionForward(ActionEvent e) {
// do code
}
等等
然后,您创建匿名类,但是其actionPerformed()
唯一要做的就是调用适当的方法。
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionOK(e);
}
});
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionBack(e);
}
});
forwardButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionForward(e);
}
});
内部类可以调用封闭类的方法。 这样,您可以使匿名类保持简短,并且可以将所有长代码放入封闭类中自己的方法中。