2012-01-18 61 views
0

我目前工作的一個小型控制檯應用程序收聽。此應用程序基於MVC體系結構。我的控制器將他自己的ActionListener添加到它所管理的視圖中。我的ConsoleView不會擴展任何允許它使用方法addActionListener的Swing或Componenent。這是我的ConsoleView的代碼,必須從命令行運行並等待用戶輸入。如何觸發和事件,並使用非擺動類

public class ConsoleView implements InterfaceView { 
    private Console c = null; 

    public ConsoleView() { 
     c = System.console(); 
     if (c == null) { 
      System.err.println("No console."); 
      System.exit(1); 
     } 
     String input; 
     do { 
      input = c.readLine(); 
     } while (!parse(input)); 
    } 

    /** 
    * Parse the input and returns true if the input has been successfully 
    * parse; 
    * 
    * @param input 
    * @return 
    */ 
    public static boolean parse(String input) { 
     if (input == null || input.equals("")) 
      return false; 
     input = input.trim(); 
     int separator = input.indexOf(' '); 
     String cmd, arguments; 
     if (separator == -1) { 
      cmd = input; 
      arguments = null; 
     } else { 
      cmd = input.substring(0, separator); 
      arguments = input.substring(separator + 1); 
     } 
     Commands command; 
     try { 
      command = Commands.valueOf(cmd); 
     } catch (IllegalArgumentException ex) { 
      command = Commands.help; 
     } 
     String print = "You used " + cmd + " with arguments :" + arguments; 
     switch (command) { 
     case startvm: 
      break; 
     case stopvm: 
      break; 
     case list: 
      break; 
     case help: 
      break; 
     case exit: 
      return true; 
     default: 
      break; 
     } 
     System.out.println(print); 
     return false; 
    } 

    public static enum Commands { 
     stopvm, startvm, list, help, exit 
    } 
    //cal comes from my controller 
    public void addCommandListener(ActionListener cal){ 
       //This is where i would do this.addActionListener(cal) 
    } 
} 

我也希望能夠讓控制器做的事情必須做,當聽者注意到,事件已被觸發,觸發在parse方法這些事件。

非常感謝。如果您有如何做的另一種選擇,繼續我會聽!

P.S.我的老闆想要使用該命令提示符,這就是爲什麼沒有Swing界面!

+0

我看到一些代碼發佈,但沒有涉及到任何東西,你聽的。這引出了問題 - 正在聽什麼?什麼會「觸發」偵聽器觸發?聽衆被告知事件的代碼在哪裏?我猜你會使用一個PropertyChangeListener,如果你聽,以使更改綁定類屬性,但同樣,給你貼什麼,我不能告訴。 – 2012-01-18 17:28:38

回答

1

沒有什麼能阻止你在任何種類的類實現Observer模式

如果您想要或創建自己的,您可以重複使用Swing的接口聽衆。然後,你必須一個註冊和註銷的方法添加到您觀察到的類,基本上添加和刪除監聽對象列表;以及引發更改事件的方法(即,使用相關參數調用已註冊偵聽器上的方法)。

雖然使用您當前的代碼存在問題,並且parse方法爲static,但您應該將其設置爲非靜態,以便了解控制檯視圖的偵聽器列表。

+0

我們誤解了他的意思是通過MVC,這是他就越想用就用一個層建築。儘管您的答案在其他具有類似要求的項目中非常有用。謝謝 – David 2012-01-26 14:01:02