改变我有两个类,A和B.爪哇 - 使用的JTextField单独的ActionListener
类A有一个JTextField,和类B. B类的私有变量实现的ActionListener。
A类和B类在单独的文件中。 我可以通过ActionListener从B类访问JTextField,还是有一种方法(这是我不能让B包含在A中的要求)我可以做到吗?我一直在寻找,我还没有找到解决方案。
感谢您的时间:)
改变我有两个类,A和B.爪哇 - 使用的JTextField单独的ActionListener
类A有一个JTextField,和类B. B类的私有变量实现的ActionListener。
A类和B类在单独的文件中。 我可以通过ActionListener从B类访问JTextField,还是有一种方法(这是我不能让B包含在A中的要求)我可以做到吗?我一直在寻找,我还没有找到解决方案。
感谢您的时间:)
在B类的actionPerfored方法,可以通过动作事件的说法访问事件源:
public void actionPerformed(ActionEvent e){
JTextField field = (JTextField)e.getSource();//Now should represent the JTextField in class A
}
就可以执行对JTextField的行为。当将类B用作其他组件的ActionListener时,我会保持警惕,但是如果源不是JTextField,则会引发异常。
这回答我的问题谢谢! – Zac 2013-03-16 05:58:40
你可以使用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
}
谢谢帮助! – Zac 2013-03-16 05:57:42
为了更好的帮助和更快,考虑发布的[SSCCE(http://sscce.org/) – Reimeus 2013-03-14 02:14:05
如果'B'被注册为'ActionListener'反对'A.textField',那么是的。 'ActionEvent'提供对事件'source'的访问,它将是'A'中的'JTextField' ......假设'B'被注册。问题是,如果你... – MadProgrammer 2013-03-14 02:16:15