Java Swing: проблема в фокусе

Я делаю редактор уровней для своей игры. У меня есть панель свойств, где я могу изменить свойства выбранного объекта. У меня также есть кнопка Сохранить для записи уровня xml.

Редактирование поля отправляется (*), когда компонент редактора теряет фокус или Enter нажимается . Это отлично работает, но единственная проблема заключается в том, что когда у меня есть такая последовательность действий:

  1. Редактировать поле
  2. Нажмите кнопку сохранения

Потому что происходит следующее:

  1. Я редактирую поле
  2. Нажимаю кнопку сохранения
  3. Уровень сохранен
  4. Поле потеряло фокус
  5. Редактирование отправлено

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

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

Заранее благодарим.

(* submit = редактирование поля также выполняется в свойстве объекта)


EDIT : Для поля я использую FocusAdapter с focusLost :

FocusAdapter focusAdapter = new FocusAdapter()
{

    @Override
    public void focusLost(FocusEvent e)
    {
        compProperties.setProperty(i, getColor());
        record(); // For undo-redo mechanism
    }
};

И для кнопки простой ActionListener с actionPerformed`.

btnSave.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent evt) {
         // Save the level
     }
});
6
задан Ry- 11 November 2011 в 21:48
поделиться