Java начинающий: шаблон для отслеживания изменений свойств объекта в диалоговом окне (сохранить приглашение при закрытии диалога) - PullRequest
0 голосов
/ 01 сентября 2011

Существует некоторая сущность:

public class Entity
{
  private String name;

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name=name;
  }

  // many other properties ...
}

В программе пользователь меняет сущность в диалоговом окне:

Entity entity=new Entity();

boolean modal=true;
Dialog dlg=new Dialog(modal);
dlg.setEntity(entity);
dlg.setVisible(true);

, затем пользователь меняет некоторые свойства и нажимает кнопку закрытия.Программа должна сообщать пользователю о сохранении изменений.

Я пытаюсь не изобретать велосипед заново, так есть ли в Java какая-то готовая практика для реализации этой схемы?

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Сначала вам нужно зарегистрировать двух прослушивателей событий:

  1. ActionListener - для экземпляра JButton.
  2. WindowListener - для экземпляра Dialog.В частности, вам нужно прослушать событие windowClosing().

Чтобы показать диалоговое окно «Сохранить» в случае закрытия этого диалогового окна, вы можете использоватьстандартный JOptionPane экземпляр.Более конкретно, вы можете отобразить диалоговое окно параметров (например, JOptionPane.showOptionDialog(...). И, основываясь на возвращаемом значении, сохранить изменения, внесенные в объект Entity пользователем.

См. Также:

Кроме того, я настоятельно рекомендую использовать компоненты Swing, а не компоненты AWT.

1 голос
/ 01 сентября 2011

Вы можете использовать шаблон Command . Обычно это используется для отмены повторения, но также может использоваться для отслеживания действий, выполненных пользователем.

1 голос
/ 01 сентября 2011

Если вас не волнует отмена, вы можете использовать boolean для отслеживания изменений.Например:


public class Entity
{
  private boolean changed;
  private String name;

  public Entity()
  {
    changed = false;
    name = StringUtils.EMPTY; // no pesky nulls.
  }

  ...

  public boolean isChanged()
  {
    return changed;
  }

  public void setName(final String newValue)
  {
    name = StringUtils.defaultString(newValue); // Again with the pesky nulls.
    changed = true;
  }
}
1 голос
/ 01 сентября 2011

Если вы хотите, чтобы модель уведомляла представление или контроллер об изменениях, то использование PropertyChangeListener является обычной практикой.

Однако в такой простой ситуации вы можете просто жить с грязным флагом, реализованным в виде (само диалоговое окно).

...