Java单个ActionListener和总体ActionListener
也许我走错了方向。让我知道 使用Swing和AWT,我在一个框架上设置了几个按钮,每个按钮都有一个对应于其特定功能的ActionListener,即Java单个ActionListener和总体ActionListener,java,swing,awt,jbutton,actionlistener,Java,Swing,Awt,Jbutton,Actionlistener,也许我走错了方向。让我知道 使用Swing和AWT,我在一个框架上设置了几个按钮,每个按钮都有一个对应于其特定功能的ActionListener,即 JButton foo_button = new JButton("Foo-Me"); foo_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { //Fancy schmancy cod
JButton foo_button = new JButton("Foo-Me");
foo_button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//Fancy schmancy code work
}
})
JButton bar_button = new JButton("Bar None");
bar_button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//Fancy schmancy code work
}
})
所以每个按钮都有自己的功能。但是,如果我想让所有按钮都做某件事(每个按钮都有相同的方法),在我的例子中,在它们做自己的事情之前清除一个标签,该怎么办
显然,我可以在每个actionPerformed()中添加任何标签.setText(“”),但这需要大量的重复,我不太喜欢这一点
噢,Java和Swing大师们来帮我。您可以将自己的
ActionListener实现子类化:
private static abstract class MyListener implements ActionListener {
@Override
final public void actionPerformed(ActionEvent evt) {
theSameTask();
uniqueTask(evt);
}
private void theSameTask() {
// the identical task
}
public abstract void uniqueTask(ActionEvent evt);
}
然后,新的侦听器将如下所示:
JButton bar_button = new JButton("Bar None");
bar_button.addActionListener(new MyListener() {
@Override public void uniqueTask(ActionEvent evt) {
//Fancy schmancy code work
}
});
您可以将自己的ActionListener实现子类化:
private static abstract class MyListener implements ActionListener {
@Override
final public void actionPerformed(ActionEvent evt) {
theSameTask();
uniqueTask(evt);
}
private void theSameTask() {
// the identical task
}
public abstract void uniqueTask(ActionEvent evt);
}
然后,新的侦听器将如下所示:
JButton bar_button = new JButton("Bar None");
bar_button.addActionListener(new MyListener() {
@Override public void uniqueTask(ActionEvent evt) {
//Fancy schmancy code work
}
});
另一种可能是使用,并为常见行为编写一个ActionListener
decorator。然后,您的代码将是
bar_button.addActionListener(new MyActionListenerDecorator( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//Fancy schmancy code work
} }) );
另一种可能是使用,并为常见行为编写一个ActionListener
decorator。然后,您的代码将是
bar_button.addActionListener(new MyActionListenerDecorator( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//Fancy schmancy code work
} }) );
我认为最好的方法是使用。这样所有的听众都会做同样的事情。我认为最好的方法是使用。这样所有的听众都会做同样的事情。+1。不过,不需要将私有方法设为final:它是隐式final。我可以将它放在我正在处理的同一个文件中吗。这是给学校的,上帝禁止好的编码应用。(我们只能提交一个文件)。刚才回答了我自己的问题。我明天一定要试试这个。如果您只可以提交一个文件,则您可以通过添加//花哨的schmancy代码工作获得加分。。。只需提交结果jar文件,其中包含实际需要的任意多个类:-)。愚蠢的规则只要求创造性的变通方法+1。不过,不需要将私有方法设为final:它是隐式final。我可以将它放在我正在处理的同一个文件中吗。这是给学校的,上帝禁止好的编码应用。(我们只能提交一个文件)。刚才回答了我自己的问题。我明天一定要试试这个。如果您只可以提交一个文件,则您可以通过添加//花哨的schmancy代码工作获得加分。。。只需提交结果jar文件,其中包含实际需要的任意多个类:-)。愚蠢的规则只是要求创造性的解决办法1234代表,你确定要回答问题吗P@JacobRaihle写了1234 rep,你确定要回答问题吗?
,我写了--->确保他想要,他可以,他的答案实际上是正确的,涵盖了最有效的方法,从这里的答案来看,一切都取决于你对Java的知识,Swing及其实现方法API@mKorbel我一点也没有冒犯的意思,只是说这是一个很好的数字:)@@Jacob Raihle和我会独家使用ActionListener,当然ActionListener是普通的、简单的和simple@Jacob我杀了他的好数字订单:-):-):-):-):-):-):-)1234代表,您确定要回答问题吗?:P@JacobRaihle写了1234 rep,你确定要回答问题吗?
,我写了--->确保他想要,他可以,他的答案实际上是正确的,涵盖了最有效的方法,从这里的答案来看,一切都取决于你对Java的知识,Swing及其实现方法API@mKorbel我一点也没有冒犯的意思,只是说这是一个很好的数字:)@@Jacob Raihle和我会独家使用ActionListener,当然ActionListener是普通的、简单的和simple@Jacob我杀了他漂亮的数字顺序:-):-):-):-):-):-)我也可以试试这个。我以前读过这方面的书(谢谢你,头一本书)。很好地使用了一个很好的模式。我也可以试试这个。我以前读过这方面的书(谢谢你,头一本书)。很好地使用了一个很好的模式。