我正在练习MVC风格的编程.我在一个文件中有一个Mastermind游戏,工作正常(可能除了"Check"按钮在开始时不可见).
http://paste.pocoo.org/show/226726/
但是当我把它重写为模型,视图,控制器文件时 - 当我点击空Pin(应该更新,并重新绘制新颜色)时 - 注意到了.谁能在这里看到任何问题?我尝试在不同的地方放置repaint(),但它根本不起作用:/
主要:
public class Main {
public static void main(String[] args){
Model model = new Model();
View view = new View("Mastermind", 400, 590, model);
Controller controller = new Controller(model, view);
view.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
import java.util.Random;
public class Model{
static final int
LINE = 5,
SCORE = 10, OPTIONS = 20;
Pin pins[][] = new Pin[21][LINE];
int combination[] = new int[LINE];
int curPin = 0;
int turn = 1;
Random generator = new Random(); …Run Code Online (Sandbox Code Playgroud) 对于学校项目,我需要制作一个简单的绘画应用程序,可以绘制线条,椭圆和矩形.
赋值指定我需要每种类型的形状的工具栏按钮和菜单项.
通过制作JToggleButtons工具栏和菜单项中的按钮,我想稍微超越一点JRadioButtonMenuItems.此外,我想要它,以便当您选择其中一个工具栏按钮时,它取消选择其他按钮,选择适当的菜单项,并取消选择其他菜单项.同样用于选择其中一个菜单项.
我知道我可以组的任何AbstractButton一个ButtonGroup,但我不知道这是正确的道路要走,是因为虽然它处理一个按钮的"组"就好了,我不知道它可以处理两个并行组.
如果没有ButtonGroup意味着在6个事件监听器中的每一个中,我将不得不手动取消选择其他按钮,并且每对将调用相同的代码来设置形状类型.
我也可以制作两个ButtonGroup,一个用于菜单,一个用于工具栏,但是我还必须复制形状类型设置代码.
在任何一种情况下,我都冒着菜单设置按钮的风险,该按钮设置了一个设置按钮的菜单项,ad adintum.
解决这个问题的最佳方法是什么?
(能够通过Netbeans GUI设计器解决问题的好处;它更容易)
我正在尝试研究JavaFX,因为我想将它用作我程序的GUI.我的问题基本上是一个概念问题:
到目前为止,我的程序主要是MVC模式的"模型"部分; 也就是说,我的几乎所有代码都是类的意义上的抽象的OO表示,所有代码都是逻辑代码.
由于我不想成为我的程序的唯一用户,我想添加MVC的"视图"部分,以便人们可以轻松地使用和操作我的程序的"模型"部分.为此,我想使用JavaFX.
在我的"Model"类中,我显然使用了Java Collections API中的各种Lists,Maps和其他类.为了让我的程序的用户操作这些底层列表和地图,我想在JavaFX中使用Observable(List/Map)接口.
澄清情况的具体例子:
假设我有一个MachineMonitor类,每3分钟检查一次机器的某些属性,例如连接是否仍然良好,齿轮转动的速度等等.如果满足某些不等式(比如说速度)齿轮下降到1转/秒的速度)MachineMonitor触发RestartMachineEvent.
目前我使用ArrayList < MachineMonitor >来跟踪所有单独的MachineMonitor.现在扩展到MVC的"视图"部分,我希望用户能够操作显示MachineMonitor列表的TableView,以便他们可以创建和删除新的MachineMonitor来监视各种机器.
这样我就可以跟踪我的程序用户想要做什么(比如,为机器#5 创建一个MachineMonitor,检查齿轮的转/秒是否低于0.5)我使用ObservableList < MachineMonitor > TableView的基础列表.
链接程序的"模型"和"视图"的最简单方法就是将"模型"类更改为具有ObservableList < MachineMonitor >而不是ArrayList < MachineMonitor >但是(转到问题主题)我觉得这非常混乱,因为它混合了"模型"和"查看"代码.
一种天真的方法是对TableView 使用ObservableList < MachineMonitor >并保留我的ArrayList < MachineMonitor >的使用.但是,根据JavaFX规范,对ObservableList < MachineMonitor >所做的更改不会影响基础List.
鉴于此,是为了解决这一难题,以便为ObservableList一个ChangeListener的最佳方式< MachineMonitor >该"传播"到ObservableList <所做的更改MachineMonitor >到底层"模型"的ArrayList < MachineMonitor >?也许把它放在一个名为MachineMonitorController的类中?
这种临时解决方案看起来非常混乱且非理想.
我的问题是:在这种情况下,保持"模型"和"视图"之间几乎完全分离的最佳方法是什么?