2013-03-14 31 views
0

改变我有两个类,A和B.爪哇 - 使用的JTextField单独的ActionListener

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

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

感谢您的时间:)

+1

为了更好的帮助和更快,考虑发布的[SSCCE(http://sscce.org/) – Reimeus 2013-03-14 02:14:05

+1

如果'B'被注册为'ActionListener'反对'A.textField',那么是的。 'ActionEvent'提供对事件'source'的访问,它将是'A'中的'JTextField' ......假设'B'被注册。问题是,如果你... – MadProgrammer 2013-03-14 02:16:15

回答

1

在B类的actionPerfored方法,可以通过动作事件的说法访问事件源:

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

就可以执行对JTextField的行为。当将类B用作其他组件的ActionListener时,我会保持警惕,但是如果源不是JTextField,则会引发异常。

+0

这回答我的问题谢谢! – Zac 2013-03-16 05:58:40

0

你可以使用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

+0

谢谢帮助! – Zac 2013-03-16 05:57:42