2013-01-17 35 views
1

我在MVC框架的View類上有3組JMenuItem。我想在控制類EventController中引用它們。有人能告訴我這是成就嗎?以下是事件控制器。類EventView由JMenuItem addEvent,editEvent,deleteEvent組成,我如何在Controller類中爲它們執行偵聽器。有人可以演示在我的Controller類上使用示例代碼嗎?將JMenuItem傳遞給控制器​​類

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; 
} 

第二個問題,我只能從View類本身更新JTable,所以

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){} 
    } 
} 

這是具有在視圖類代碼不好的做法,最好應在型號,但該怎麼辦這可以讓你看看我。這些概念對我而言是新事物,並且想要學習。由於JTable我覺得它很困難

回答

3

讓你的模型導出Action的實例,它們可以根據需要添加到菜單和按鈕中。因爲數據庫訪問本質上是異步的,所以讓每個這樣的動作都使用worker thread在後臺查詢數據庫,同時更新EDT上的表模式。關於Swing組件和模型之間的關係,另請參閱A Swing Architecture Overview

附錄:你能告訴我一個代碼示例嗎?

  • FileMenu是使用Action封裝功能的一個非常基本的例子。

  • 引用的示例hereJToolBar中使用Action更廣泛。

  • JHotDraw,引here,是一個非常複雜的例子,改變基於上下文的可用Action實例中,如所討論的here

  • example提供了在Swing中MVC的一般檢查。

+0

控制器是如何進入這個模型和通信視圖的網關的。你能告訴我一個代碼示例嗎?我關心控制器類檢索JMenuItems的地址,就像引用它,以便該操作在控制器類中執行,而不是查看類 – Hoody

+0

偉大的最後一個鏈接:D – Hoody