gpt4 book ai didi

java - 当 ActionListener 位于不同的类中时,如何访问 ActionEvent 的源?

转载 作者:行者123 更新时间:2023-11-29 06:12:36 25 4
gpt4 key购买 nike

我无法理解这个问题。我第一次尝试遵循 MVC 模式,现在很难访问 ActionEvent 的源代码,因为 ActionListener 位于不同的类中。但是让代码来说话......

在“ View ”中:

// ControlForms.java

...

private JPanel createSearchPanel() throws SQLException {

...

comboBoxCode = new JComboBox(); // Field comboBoxCode -> JComboBox()
SwingUtilities.invokeLater(new Runnable() {
public void run() {
AutoCompleteSupport<Object> support = AutoCompleteSupport.install(
comboBoxCode, GlazedLists.eventListOf(jnlCodeArray));
}
}); // Auto-Complete comboBox from GlazedLists

...

public void setComboListener(ComboListener comboListener) {
comboBoxCode.addActionListener(comboListener);
}

...

}

然后,在我称之为 Controller 的地方,我有两个不同的类:

// Controller.java

public MyController() throws SQLException {
...
addListeners();
}

...

private void addListeners(){
View view = getView();
getView().getControlForm().setComboListener(new ComboListener());

}

public class ComboListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ComboBox listened to! e = " + e.toString());
}
}

现在,e 显然没有给出变量的名称(目前我希望它给出),所以我不能 if 测试 e.getSource()

因此我的问题是:是否有或者 a) 查询(例如通过 if)e 的来源的方法,或者b)获取变量名的更简单的方法?

非常非常感谢您的见解和提示!

最佳答案

为什么需要变量名?为什么你不能像这样进行事件处理

public class ComboListener implements ActionListener 
{
public void actionPerformed(ActionEvent e)
{
JComboBox source = (JComboBox)e.getSource();

//do processing here
}
}

我认为如果你需要根据变量名进行处理,显然你需要针对不同的组合框使用不同的监听器。

关于java - 当 ActionListener 位于不同的类中时,如何访问 ActionEvent 的源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com