Сначала соблюдайте правила инкапсуляции. Создайте поля private
. Затем вы хотите иметь getters
для полей, которые вам нужны для доступа.
public class GUI {
private JTextField field = new JTextField();
public GUI() {
// pass this instance of GUI to other class
SomeListener listener = new SomeListener(GUI.this);
}
public JTextField getTextField() {
return field;
}
}
Затем вы захотите передать свой графический интерфейс любому классу, который должен получить доступ к текстовому полю. Скажите класс ActionListener
. Используйте инъекцию конструктора (или «передать ссылку» ) для прохождения класса GUI
. Когда вы это сделаете, GUI
, на который ссылаются в SomeListener
, является одним и тем же, и вы никогда не создадите новый (который не будет ссылаться на тот же самый экземпляр, который вам нужен).
public class SomeListener implements ActionListener {
private GUI gui;
private JTextField field;
public SomeListener(GUI gui) {
this.gui = gui;
this.field = gui.getTextField();
}
}
Хотя вышеупомянутый может работать , он может быть ненужным. Сначала подумайте, что именно вы хотите сделать с текстовым полем. Если какое-то действие, которое может быть выполнено в классе GUI, но вам просто нужно получить доступ к чему-то в классе для его выполнения, вы можете просто реализовать interface
с помощью метода, который должен выполнить что-то. Что-то вроде этого
public interface Performable {
public void someMethod();
}
public class GUI implements Performable {
private JTextField field = ..
public GUI() {
SomeListener listener = new SomeListener(GUI.this);
}
@Override
public void someMethod() {
field.setText("Hello");
}
}
public class SomeListener implements ActionListener {
private Performable perf;
public SomeListener(Performable perf) {
this.perf = perf;
}
@Override
public void actionPerformed(ActionEvent e) {
perf.someMethod();
}
}
Вы должны перемещаться после маркера, сохраненного как показано ниже:
storeToken(responseData){
AsyncStorage.setItem(AUTH_TOKEN, responseData, (err)=> {
if(err){
console.log("Something went wrong");
throw err;
} else{
this.props.navigation.navigate('Home');
console.log("Success");
}
}).catch((err)=> {
console.log("error is: " + err);
});
}
Код на главном экране:
render() {
return <View/>
}