使用paintComponent

时间:2018-10-28 14:42:28

标签: java swing model-view-controller

我想尝试使用paintComponent制作一个示例交通信号灯程序,但是我对MVC方法有些困惑,有两个问题:

我已经使用框架(视图)引擎(模型)和JButton(控制器)来实现,这将打开/关闭灯。

对我来说,最简单的方法是通过调用toggle()使我的控制器直接与视图通信。 (一种将布尔值“ active”切换为true / false”的方法,然后在视图上调用repaint();在视图上,此repaint方法将检查其是否处于活动状态,然后根据active是否为活动状态绘制一些不同的内容正确或错误。

第一个问题是,MVC标准可以接受吗?我会说是的,因为它只是绘图,但是我认为不应在views方法中进行计算,对“活动”检查是否考虑在内?

更好的解决方案是在模型中创建一个方法,该方法然后可以在视图上调用toggle()方法,因为它正在技术上更改数据?还是直接从控制器更改它更好。在较小的情况下,这当然更容易,但是我可以看到对于较大的解决方案是否会造成混淆。

不确定该问题是否足够清楚,请告诉我,我将尝试提供更多信息。

1 个答案:

答案 0 :(得分:1)

  

对我来说,最简单的方法是通过调用toggle()使我的控制器直接与视图通信。 (一种将布尔“ active”切换为true / false”的方法,然后在视图上调用repaint();在视图上,此repaint方法将检查其是否处于活动状态,然后根据active是否为活动状态绘制一些不同的内容对还是错

不好,因为这会从您的程序中完全删除该模型,并且该模型是MVC的关键。 除非,否则您说的是活动字段是整个模型,这使您的MVC变得微不足道。

  

在模型中创建一个方法,然后可以在视图上调用toggle()方法。

不,这是不可接受的,因为MVC的一个关键是模型必须完全不了解视图。

按钮不是应该是控件,而应该是绝对视图的一部分。但是,它的侦听器可以是控件,也可以是与控件通信的按钮已被按下的控件。然后,控件将通知模型,该模型决定是否应更改状态。控件应在模型上附加一个侦听器,该侦听器然后更改视图以反映模型的状态。