У меня вопрос: как я могу вернуть переменную из класса, реализующего ActionListener, в переменную другого класса?
Вы не можете.
Беглый взгляд на JavaDocs для ActionListener
покажет вам, что метод не возвращает значение.Я почти уверен, что даже если бы это было возможно, это было бы бесполезно, поскольку ваш код знает, что метод был запущен, только тогда, когда он действительно вызывается.
Решение?Передайте "модель" реализации ActionListener
...
Начните с определения простого interface
или контракта ...
public PathPicker {
public void setPath(File path);
}
Затем обновите PickSomething
, чтобы принимать экземплярыэтого interface
...
public class PickSomething implements ActionListener {
private PathPicker picker;
public PickSomething(PathPicker picker) {
this.picker = picker;
}
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser selectElement = new JFileChooser();
int status = selectElement.showOpenDialog(null);
if (status == JFileChooser.APPROVE_OPTION) {
picker.setPath(selectElement.getSelectedFile());
} else {
picker.setPath(null);
}
}
}
Теперь все, что вам нужно сделать, это реализовать интерфейс PathPicker
, передать ссылку на него в PickSomething
при создании и дождаться его вызоваsetPath
.
Это обычно называется «делегированием» (и ActionListener
также является примером этого), где фактическая ответственность «делегирована» какому-то другому объекту.Это также пример «наблюдаемости», в очень простом смысле, когда PickSomething
может быть наблюдателем с помощью экземпляра PathPicker
для изменения его состояния (путь выбран).
Itтакже разъединяет код, так как PathPicker
не имеет значения, как задан путь, только то, что он уведомляется, когда он есть.
Примечание о путях ...
File
является абстрактным представлением файла или пути файловой системы.Он обладает множеством действительно интересных функций, которые упрощают и упрощают работу с файловой системой.
Многие API также используют ссылку File
для выполнения своих операций.Вам следует избегать преобразования File
в String
, где это возможно, так как вы собираетесь лишить себя этой функциональности и усложнить свою жизнь в долгосрочной перспективе