【问题标题】:MVC, Swing and exception in JavaJava中的MVC、Swing和异常
【发布时间】:2014-05-31 06:14:15
【问题描述】:

我正在用 Java 开发一个游戏,我正在使用 MVC 设计模式和用于 GUI 的摇摆。模型、视图和控制器通过观察者/可观察的设计模式在它们之间进行通信。现在在控制器和视图中,当玩家想要在游戏中执行非法操作时,我必须抛出异常。例如,如果玩家想在游戏中购买任何东西但他有 0 个硬币,则在视图中会抛出异常。当抛出异常以向玩家显示他无法执行该操作时,有一种方法可以显示 JDialog 吗?视图能否捕捉到控制器和视图的异常?

【问题讨论】:

  • 你应该考虑拦截器模式。
  • 观察者/可观察者没有办法做到这一点?
  • 如果你使用MVC,请解释为什么你会在视图中抛出异常?决定玩家是否可以购买属于模型或控制器的物品的逻辑不是吗?
  • 是的,控制器决定玩家是否可以购买物品。但如果玩家不能这样做,我想在屏幕上显示错误。

标签: java swing exception model-view-controller


【解决方案1】:

也许我误解了你的问题我不明白你为什么在视图中抛出异常。 对我来说没有意义。 但是

// 模型 ///////////////////p>

class player{

int coin count = 0

setcoincount(int number){ // }

getcoincount() { // }
}

// 控制器 //////////////////

class cont{

model m;
view v;

cont(model m, view v){
// code..
}

int checkBalance(){

return m.getBalance(); 
// get the balance from the model
// sends it to the view
}

}

// 视图/////////////////

class view{

cont c;

// when the player click the buy button
..... butonClick event handle.. (){

c.checkBalance(); 
// if the balance is 0 throw an exception

}

}

// 主要方法 /////////////////

class mian{

 psvm(string args[]){

// the model and view doesn't know each other

model m = new model()

view v = new view()

controller c = new controller (m , v )

v.setVisible true


}    
}

【讨论】:

    【解决方案2】:

    考虑使用 Actions(作为控制器的一部分)。

    • 动作可以由视图事件触发,并且可以修改模型。
    • 动作可以有precoditions,用于确定它们是否启用。例如,这使您可以检查玩家是否有足够的硬币来购买物品。
    • 您可以将操作直接绑定到“购买”按钮(操作的启用状态决定按钮是否启用,按下按钮执行操作)。
    • 对于所有无法通过先决条件处理的问题(用户可能有足够的硬币,但与游戏服务器的连接丢失,从而阻止购买),操作可能会引发异常。

    我建议使用 framework-agnostic 操作界面,并在必要时创建 适配器(此处:用于 Swing)。

    public interface Action {
    
        public void execute () throws Exception;
    
        public boolean isEnabled ();
    }
    

    对于可以绑定到 UI 元素(按钮、菜单...)的操作:

    public interface DisplayableAction extends Action {
    
        public String getName();
    
        public String getTooltip();
    }
    

    【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多