【问题标题】:"Nested" ActionListeners in Java?Java中的“嵌套”ActionListeners?
【发布时间】:2010-12-17 17:03:17
【问题描述】:

我正在开发一个应用程序,在该应用程序中,在文本字段中输入股票代码会调用股票价格图表的绘图。我还想通过选择菜单项以某些方式修改此图表。

在软件方面,如果我可以让菜单项 ActionListeners 更改状态参数的值,然后简单地调用 TextField ActionListener 来重新绘制图表,那将是最简单的。

当然还有其他方法可以实现这一点,但是有没有办法从另一个动作监听器中调用动作监听器。编译器不喜欢这个主意。

提前感谢您提供任何见解。

约翰·多纳

【问题讨论】:

  • 你能发布你的代码示例吗?
  • 对我来说听起来是个非常糟糕的主意。
  • 如果您要说这是一个坏主意,至少添加一些文字说明如何使其正常工作。

标签: java swing actionlistener


【解决方案1】:

一种方法是让你的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 中排除了重新绘制的部分。如果您需要其他代码路径来触发重新绘制,那么现在很容易实现这些路径,并且您的绘图代码现在很好地与参数更新代码分开。

【讨论】:

    【解决方案2】:

    您正在尝试创建一个既充当订阅者又充当发布者的类。只需让您的类实现 ActionListener 接口,而且还提供一种订阅类中的 ActionListener 的方法。

    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 的了解:这不是我想要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2019-11-27
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多