Я сейчас работаю над небольшим консольным приложением.Это приложение основано на архитектуре MVC.Мой контроллер добавляет свой собственный ActionListener к представлению, которым он управляет.Мой ConsoleView не расширяет Swing или Компонент, который позволяет ему иметь метод addActionListener
.Это код моего 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
, чтобыКонтроллер делает то, что должен делать, когда слушатель замечает, что событие было инициировано.
Большое спасибо.Если у вас есть альтернативный вариант, как это сделать, продолжайте, я буду слушать!
PS Мой босс хочет использовать эту командную строку, поэтому нет интерфейса Swing !!