【问题标题】:Java - change JTextField using separate ActionListenerJava - 使用单独的 ActionListener 更改 JTextField
【发布时间】:2013-03-02 06:02:18
【问题描述】:

我有两个班级,A 和 B。

A 类有一个 JTextField 和一个 B 类的私有变量。 B 类实现 ActionListener。

A 类和 B 类位于不同的文件中。 我可以通过 ActionListener 从 B 类访问 JTextField,还是有办法(要求我不能在 A 中包含 B 类)我可以做到吗?我一直在寻找,我还没有找到解决方案。

感谢您的宝贵时间 :)

【问题讨论】:

  • 如需更好的帮助,请考虑发布SSCCE
  • 如果B 被注册为ActionListener 而不是A.textField,那么是的。 ActionEvent 提供对事件的source 的访问,这将是A 中的JTextField ...当然假设B 已注册。问题是,你应该……

标签: java swing awt actionlistener jtextfield


【解决方案1】:

在B类的actionPerfored方法中,可以通过ActionEvent参数访问事件源:

public void actionPerformed(ActionEvent e){
    JTextField field = (JTextField)e.getSource();//Now should represent the JTextField in class A
}

然后您可以对 JTextField 执行操作。在将 B 类用作其他组件的 ActionListener 时,我会保持警惕,因为如果源不是 JTextField,这会引发异常。

【讨论】:

    【解决方案2】:

    您可以使用 event.getSource 来访问您的组件,

     public void actionPerformed(ActionEvent evt)
    {
      JTextField registeredComponent = (JTextField)evt.getSource(); 
      // dangerous cast required 
    }
    

    如果您必须从侦听器访问不同的组件类型,您也可以编写自定义的观察者模式实现。

    例如一个自定义的 EventObject 实现,它包含一个通用类型的源组件。

    public void actionPerformed(CustomEvent customEvt)
    {
    T registeredComponent = customEvt.getSource(); //generic getSource
    }
    

    看看http://en.wikipedia.org/wiki/Observer_pattern

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-23
      • 2012-06-06
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2013-12-28
      相关资源
      最近更新 更多