Je ne parviens pas à contourner celui-ci. J'ai essayé d'adhérer au modèle MVC pour la première fois et j'ai maintenant des difficultés à accéder à la source d'un ActionEvent car l'ActionListener est situé dans une classe différente. Mais que le code faire parler ...Comment accéder à la source d'un ActionEvent lorsque l'ActionListener se trouve dans une classe différente?
Dans la "vue":
// 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);
}
...
}
Puis, à ce que j'appelle le contrôleur, j'ai deux classes différentes:
// Controller.java
public MyController() throws SQLException {
...
addListeners();
}
...
private void addListeners(){
View view = getView();
getView().getControlForm().setComboListener(new ComboListener());
}
et
public class ComboListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ComboBox listened to! e = " + e.toString());
}
}
maintenant, évidemment e
ne donne pas le nom de la variable (qui, au moment Je souhaite qu'il serait), donc je ne peux pas if
test pour e.getSource()
.
Ma question est donc: est-il soita) un moyen d'interroger (via if
par exemple) la source d'e ou b) une façon moins compliquée à obtenir au nom de la variable?
Merci beaucoup d'avance pour vos idées et conseils!
Merci. Je suis nouveau à MVC, alors j'essayais de faire les choses à l'ancienne. Bien sûr, vous avez raison d'avoir besoin d'un écouteur par 'JComboBox'. Est-ce * bonne pratique de codage * d'avoir un écouteur par, disons, élément de forme? –
D'une manière générale, il est préférable de séparer chaque comportement de manipulation d'événement dans une classe séparée (quoique interne). Par conséquent, si la façon dont vous gérez les événements sur deux JComboBox différents est différente, placez-les dans des classes différentes. D'un autre côté, si vous avez deux zones de liste déroulante qui se complètent automatiquement, essayez d'effectuer la gestion dans la même classe. –
Merci encore pour la clarification! –