将JMenuItem传递给Controller类

时间:2013-01-17 03:55:02

标签: java sql swing oop design-patterns

我在MVC框架的View类上有3组JMenuItem。我想在controll类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中使用代码这是不好的做法,理想情况下应该在模型中,但是如何执行此操作可以告诉我。这些概念对我来说是新的,我想学习。由于JTable我觉得很难

1 个答案:

答案 0 :(得分:3)

让您的模型导出Action的实例,可以根据需要添加到菜单和按钮中。因为数据库访问本质上是异步的,所以让每个这样的操作使用worker thread在后台查询数据库,同时在EDT上更新表模式。另请参阅A Swing Architecture Overview有关Swing组件和模型之间的关系。

附录:你能告诉我一个代码示例吗?

  • FileMenu是使用Action封装功能的一个非常基本的示例。

  • 引用的示例hereAction中更广泛地使用JToolBar

  • JHotDraw,引用here,是一个非常复杂的示例,可根据上下文更改可用的Action实例,如here所述。

  • example提供了对Swing中MVC的一般性检查。