ActionListeners, множественные обновления полей и перезагрузка пользовательских настроек GUI из файла
У меня есть несколько мест, где я конвертирую между одной системой координат и другой. В каждом случае между косинусом / синусом есть вычисление, назовем их x, y и x', y'. Это все JFormattedTextFields.
Если пользователь вводит значение в любой из 4, вызывается ActionListener. Позволяет вызывать поля fieldx, fieldy, fieldx1 и fieldy1. Если пользователь вводит что-либо в fieldx или fieldy, у меня есть HAD-клавиатура и слушатели фокуса (одинаковые для всех четырех полей), которые обновляют fieldx1 и fieldy1 из текущих значений в fieldx и fieldy. Если бы вызов слушателя был из fieldx1 или fieldy1, он вычислил бы fieldx и fieldy.
Затем я решил сохранить выбранные поля (в том числе несколько флажков вкл / выкл и некоторые значения счетчиков) в файле конфигурации (новое требование после разработки). Я думал, что, устанавливая значения и состояния, все будет хорошо, НО определенные вещи не происходят (за кадром). Я решил, что отчасти это происходит из-за того, что триггерные методы при различных проверках, вводе и т. Д. Не выполняются, потому что поля не запускают слушателей клавиатуры и фокуса, когда они были заданы фрагментом кода.
После чтения в Интернете я изменил весь KeyboardAdapter на ActionListener, и после того, как я установил значение, я вызываю postActionEvent() в полях, которые я упомянул выше, и теперь все фоновые вещи происходят (хотя порядок является проблемой, и я собираюсь сохранить дополнительную информацию о состояние, чтобы обновить это должным образом). Я сделал это изменение, потому что я думал, что будет более трудно запустить так много поддельных событий клавиатуры?
Вероятно, есть более умные / умные способы сделать это, но сейчас я стараюсь не трогать слишком много кода.
У кого-нибудь есть предложения о том, как сохранить состояние панели и обновить ее (текущий объект, панель)?
Если я продолжу делать это таким образом, может кто-нибудь предложить способ минимизировать время срабатывания ActionListener? Кажется, что стрелять так часто, это смешно!
Должен ли я вместо этого делать то, что предложено здесь?
Кажется, что здесь задействовано гораздо больше кода, но гораздо точнее, что происходит, когда...
Если этот вопрос / обсуждение здесь неуместны, просто дайте мне знать:). Просто набрав эту страницу, я подумал о том, что нужно почитать и попробовать.
1 ответ
Я стараюсь не трогать слишком много кода.
Это основополагающая ошибка; мусорная корзина является важным инструментом проектирования, и один или несколько минимальных примеров будут иметь неоценимое значение при обучении составлению более сложных приложений.
У кого-нибудь есть предложения о том, как сохранить состояние панели и обновить ее (текущий объект, панель)?
Используя шаблон Модель-Вид-Контроллер, данные программы должны храниться в подходящей модели, и преобразования должны выполняться, когда элементы модели отображаются в представлении; Converter
пример показывает, как управлять пользовательскими событиями, и этот пример раскрывает тему
Если я продолжу делать это таким образом, может кто-нибудь предложить способ минимизировать время срабатывания ActionListener?
Как предлагается в оригинальной статье, используйте Action
инкапсулировать поведение. См. Дизайн приложений Java SE с MVC: Проблемы с дизайном приложений для более глубокого изучения проблемы.