Проблема с обновлением родительского JFrame

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

У меня есть приложение, которое, возможно, из-за плохого дизайна, порождает новые JFrames через рабочий процесс пользователей. Мой вопрос: если в порожденном JFrame есть событие, может ли он связаться и передать данные или событие своему родителю?

Я читал, что использование JDialog кажется способом проектирования, но давайте предположим, что это не вариант. По сути, JFrame1 содержит JTable со списком данных. Действие порождает JFrame2, и пользователь «делает что-то», что влияет на данные в списке в JFrame1. После закрытия JFrame2 есть ли способ управлять JTable на основе события закрытия JFrame2?

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

Спасибо!


person attach    schedule 22.11.2010    source источник


Ответы (3)


Вы можете использовать «слушатели» для прослушивания различных событий.

Похоже, вы можете начать с Как написать прослушиватель окон.

Я читал, что использование JDialog кажется способом проектирования, но давайте предположим, что это не вариант.

Почему? Код тот же, и JDialogs предназначен для этой цели. Каково конкретное требование, которое говорит, что вам нужно использовать JFrame?

Действие порождает JFrame2, и пользователь «делает что-то», что влияет на данные в списке в JFrame1. После закрытия JFrame2 есть ли способ управлять JTable на основе события закрытия JFrame2?

Это общий дизайн. Пользователь выбирает строку для изменения или обновления, и создается диалоговое окно модели для отображения всех данных, чтобы их можно было изменить. При сохранении диалога данные в таблице обновляются. Если это ваше требование, вы можете просто передать TableModel в диалоговое окно. Затем, когда диалоговое окно закрывается, вы обновляете TableModel, и таблица будет автоматически перерисована.

person camickr    schedule 22.11.2010
comment
Отвечая на вопрос «Почему?»: Честно говоря, на данном этапе потребовался бы значительный рефакторинг. Хотя я совсем не боюсь делать это, когда у меня есть больше времени, у меня есть несколько ограничений, которые сделали бы существующий дизайн предпочтительным для использования, если бы у него была возможность. Спасибо за ваши ответы. Я нашел их всех проницательными. - person attach; 22.11.2010

Вам нужно будет захватить событие закрытия окна, используя прослушиватель окна. Слушателю окна также потребуется ссылка на данные, которые необходимо изменить.

person jzd    schedule 22.11.2010

В дополнение к использованию Window.addWindowListener() в JFrame или JDialog рассмотрите возможность использования подхода модель-представление. Пусть событие закрытия изменяет данные таблицы, а не саму таблицу. Используйте AbstractTableModel в качестве модели таблицы и следите за изменениями данных.

person Andy Thomas    schedule 22.11.2010