AWT ActionListener как абстрактный класс
У меня есть программа с графическим интерфейсом AWT на Java. Моя проблема в том, что у меня есть много абстрактных классов (ActionListener) в этой программе. В рамках этих абстрактных классов мне нужно вызывать атрибуты из основного класса. Итак, на данный момент я должен установить все необходимые атрибуты как окончательные. Это не приятно. Мой вопрос заключается в том, как я могу вызвать атрибуты из основного класса (не устанавливая это в качестве окончательного). Какой стиль кода лучше?
Например:
public class mainClass {
TextField field1 = new TextField(10);
(...)
Button connect = new Button("Connecting...");
(...)
connect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ex) {
methodFromTheMainClass(field1.getText());
// How can I call the method methodFromTheMainClass?
}
});
private void methodFromTheMainClass(String fieldContent) {
(...)
}
}
Спасибо за помощь, и извините за мой английский.:-/
1 ответ
final
Ключевое слово является довольно хорошим решением почти везде, где его можно использовать. В вашем случае вполне нормально использовать final
ключевое слово.
Но если вы сильно хотите, чтобы поля не final
(или из-за ваших потребностей в бизнес-логике) просто создайте внутренний (нестатический) класс, который содержит все ваши поля, доступ к которым осуществляется из локальных абстрактных классов.
Вот пример:
public class YourClass {
private class Container {
private TextField field = new TextField();
private Button connectButton = new Button("Connecting...");
}
private final Container container = new Container();
private void establishConnection() {
container.connectButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// connection code here
container.field.setText("Connection established"); // access to an inner class
}
});
}
}