Java中嵌套的ActionListeners?
我正在开发一个应用程序,其中在文本框中输入股票代码符号调用股票价格图的图表。我也想通过选择菜单项以某种方式修改此图表。Java中嵌套的ActionListeners?
用软件来说,如果我可以让菜单项ActionListeners更改状态参数的值,那么最简单的方法就是调用TextField ActionListener重新绘制图表。
当然还有其他方法可以实现这一点,但有没有什么方法可以从另一个actionlistener中调用动作侦听器。编译器不喜欢这个想法。
在此先感谢您的任何见解。
约翰·多纳
您正试图创建一个充当订阅者和发布者的类。简单地让你的类实现ActionListener接口,但也提供了一种方法来订阅你的类中的ActionListeners。
public class MyActionSubPub
{
private List<ActionListener> downstreams = new ArrayList<ActionListener>();
public MyActionSubPub(AbstractButton(or whatever) button)
{
button.addActionListener(this);
}
public addActionListener(ActionListener listener)
{
downstreams.add(listener);
}
public void actionPerformed(ActionEvent event)
{
... do your stuff ...
... loop through all downstreams, call actionPerformed on each...
}
}
或者,您可以创建一个发送事件给一个班,等待其返回,然后发送动作到下一类的适配器。
那么,你已经提高了我对Java的知识:这不是我想要的。谢谢。 – 2010-12-17 21:00:40
一种方式做,这将是使你的ActionListeners
“瘦”,让他们委托给私有方法的地方,例如:
class Controller {
... // variable declarations etc
public Controller() {
textField.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
setStockSymbol(...);
replot();
}});
menuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
setStatusParameter(...);
replot();
}});
}
private void replot() {
// Do whatever
}
}
这个因素了型重构部分来自ActionListeners
。如果您需要其他代码路径来触发重绘图,那么现在实现这些路径很简单,而且您的绘图代码现在可以很好地与参数更新代码分开。
你可以发布你的代码示例吗? – 2010-12-17 17:07:38
听起来对我来说是一个令人难以置信的不好主意。 – 2010-12-17 17:08:56
如果你打算说这是一个坏主意,至少应该添加一些文字,以使其正确工作。 – 2010-12-20 17:35:08