Java 如何使用非swing类触发和事件并监听它
我目前正在开发一个小型控制台应用程序。此应用程序基于MVC体系结构。我的控制器将自己的ActionListener添加到它管理的视图中。我的ConsoleView不扩展任何Swing或组件,使其可以使用方法Java 如何使用非swing类触发和事件并监听它,java,events,actionlistener,Java,Events,Actionlistener,我目前正在开发一个小型控制台应用程序。此应用程序基于MVC体系结构。我的控制器将自己的ActionListener添加到它管理的视图中。我的ConsoleView不扩展任何Swing或组件,使其可以使用方法addActionListener。这是我的ConsoleView的代码,必须从命令shell运行,并等待用户输入 public class ConsoleView implements InterfaceView { private Console c = null; pu
addActionListener
。这是我的ConsoleView的代码,必须从命令shell运行,并等待用户输入
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
方法中触发这些事件,以便控制器在侦听器注意到已触发事件时执行它必须执行的操作
非常感谢。如果你有其他选择,我会听你的
另外,我的老板想使用这个命令提示符,这就是为什么没有Swing界面 没有什么可以阻止您在任何类型的类中实现观察者模式 如果需要,可以重用Swing的侦听器接口,或者创建自己的接口。然后,您必须向您的可观察类添加register和unregister方法,该方法基本上将侦听器对象添加和删除到列表中;以及触发更改事件的方法(即,使用相关参数调用已注册侦听器上的方法)
但是当前代码存在一个问题,
parse
方法是static
,您应该将其设置为非静态,以便它了解console视图的侦听器列表。我看到一些发布的代码,但与您正在侦听的内容无关。这就引出了一个问题——到底在听什么?什么会“触发”听众开火?哪里是将事件通知侦听器的代码?我猜如果你正在监听对绑定类属性的更改,你会使用PropertyChangeListener,但是再一次,根据你所发布的内容,我就是说不出来。我们误解了他所说的MVC,它更像是他想要使用的层架构。虽然您的答案在其他具有类似需求的项目中非常有用。谢谢