Функция обратного вызова в JTextField - PullRequest
3 голосов
/ 18 августа 2011

У меня есть класс докладчика и несколько текстовых полей в моем представлении.

Я хочу, чтобы мой докладчик сказал: «Каждое текстовое поле, которое меня слушает, сделайте что-нибудь сейчас».

НО я не хочу использовать Observabe / Observer, так как я уже использую его и не хочу запутаться.

Чтобы быть более конкретным, я хочу, чтобы текстовые поля обновляли карту в презентере:

Presenter.java:

public class Presenter  {

   private HashMap<String,MyObject> map;

   theMethod(){
     //to all text fields, please update the map

Затем текстовое поле на панели:

JTextField tf = new JTextField("tf 1");
tf.//add something to listen to the presenter

Началом процесса является метод в предъявителе:

  1. метод () вызывается (не по представлению)
  2. theMethod () вызывает метод, связанный с TextFields
  3. Все методы, вызываемые в каждом TextFields, что-то делают

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Как насчет того, чтобы вместо JTextField s слушать Presenter, Presenter будет их слушать?

public class Presenter  {

   private HashMap<String,MyObject> map;
   private List<MyTextField> listeners = new ArrayList<MyTextField>();

   private void theMethod() {
       for (MyTextField mtf : listeners) {
           mtf.updateMap();
       }
   }

   private void addMyTextFieldListener(MyTextField listener) {
        listeners.add(listener);
   }
}
1 голос
/ 18 августа 2011

Я нашел это!

Я использую обратный вызов Runnable в докладчике.

На мой взгляд, у меня есть:

        presenter.setCallback(new Runnable(){
            public void run(){
                System.out.println("the presenter want me to do something");
                //stuff
            }
        });

И в моем докладчике:

private Runnable callback;

public void theMethod(){
    System.out.println("I was triggered by another far away view");
    SwingUtilities.invokeLater(this.callback);
}

Конечно, я собираюсь реализовать несколько списков для каждого текстового поля.

В итоге у меня ожидаемое поведение:

  • Некоторые методы разошлисьв некоторых местах, но зарегистрированы как обратные вызовы в докладчике
  • Теперь докладчик может запускать эти методы, когда хочет!

Отлично!

1 голос
/ 18 августа 2011

Не совсем уверен, что вы спрашиваете, но я вижу следующий комментарий в вашем коде

// ко всем текстовым полям, пожалуйста, обновите карту

Если вы просто хотите, чтобы в текстовых полях обновлялась карта с текстом в каждом текстовом поле, то все, что вам нужно, это чтобы у докладчика был СПИСОК всех текстовых полей, и тогда докладчик может перебирать список и текст каждого текстового поля, а затем обновить карту.

Итак, ваш код будет выглядеть примерно так:

Presenter presenter = new Presenter();
JTextField tf1 = new JTextField();
presenter.addPresentee( tf1 );

Все, что делает метод addPresentee (), это добавляет текстовое поле в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...