我目前工作的一個小型控制檯應用程序收聽。此應用程序基於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界面!
我看到一些代碼發佈,但沒有涉及到任何東西,你聽的。這引出了問題 - 正在聽什麼?什麼會「觸發」偵聽器觸發?聽衆被告知事件的代碼在哪裏?我猜你會使用一個PropertyChangeListener,如果你聽,以使更改綁定類屬性,但同樣,給你貼什麼,我不能告訴。 – 2012-01-18 17:28:38