Передача JMenuItem в класс контроллера
У меня есть 3 набора JMenuItem
в классе View инфраструктуры MVC. Я хочу сослаться на них в классе управления EventController
, Может кто-нибудь показать мне, что это достигнуто? Ниже находится Контроллер событий. Класс EventView состоит из JMenuItem
addEvent, editEvent, deleteEvent, как мне сделать слушателей для них в классе Controller. Может кто-нибудь продемонстрировать использование примера кода поверх моего класса Controller?
public class EventController implements ActionLister {
private EventModel model;
private EventView view;
private ActionListener actionListener;
public EventController(EventModel model, EventView view){
this.model = model;
this.view = view;
}
Второй вопрос, я могу только обновить JTable
от View
сам класс, так
public void updateEventTable() {
try {
String sql = "SELECT date as 'Date',eventName as 'Name', time as 'Time' FROM Event";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
tableEvent.setModel(DbUtils.resultSetToTableModel(rs));
tableEvent.getColumnModel().getColumn(0).setPreferredWidth(80);
tableEvent.getColumnModel().getColumn(1).setPreferredWidth(170);
tableEvent.getColumnModel().getColumn(2).setPreferredWidth(110);
}
catch (Exception e ) {
JOptionPane.showMessageDialog(null, e);
} finally {
try {
rs.close(); pst.close();conn.close();;
} catch(SQLException e){}
}
}
Это плохая практика иметь коды в View Class, в идеале должно быть в Model, но как это сделать, вы можете показать мне. Концепции являются новыми для меня и хотят учиться. Потому что JTable
Мне очень сложно
1 ответ
Позвольте вашей модели экспортировать экземпляры Action
это может быть добавлено к меню и кнопкам по мере необходимости. Поскольку доступ к базе данных по своей сути асинхронный, пусть каждое такое действие использует рабочий поток для запроса базы данных в фоновом режиме при обновлении табличного режима в EDT. См. Также Обзор архитектуры Swing относительно отношений между компонентами и моделями Swing.
Приложение: Можете ли вы показать мне пример кода?
FileMenu
это очень простой пример использованияAction
инкапсулировать функциональность.Приведенный здесь пример использует
Action
более широко вJToolBar
,JHotDraw
Приведенный здесь очень сложный пример, который изменяет доступныйAction
случаи, основанные на контексте, как обсуждено здесь.Этот пример предлагает общий экзамен MVC в Swing.