Java-绘制Sudoku-如何以正确的方式构建代码



(一个一般问题)

我有一个作业,必须在其中构建一个sudoku,我考虑了构建的类/逻辑,并认为我可以使用建议。

我想使用jframe并在其上构建一个带有textfields的jpanel(用户应该"求解" sudoku)。

我有一个名为" drawsudoku"的课程,该课程绘制一个空板。我必须先画一个空板,因此"用户"可以在其中输入数字。在该板上,我必须检查一些逻辑。所以我必须自己访问文本场。

到目前为止,这就是我所做的一切。现在,我正在考虑在董事会后面使用"逻辑"建造另一个课程。

,但我遇到了一个问题我如何从另一个类中获得Jpanel上存在的JTEXTFIELD?

我可以为其背后的图纸和逻辑提供单独的类吗?
谢谢!

在该板上,我必须检查一些逻辑。所以我必须自己访问文本场。

不一定是

如何从另一堂课上获得Jpanel上存在的Jtextfields?

您如何通过登录器或" getter"方法评估来自另一个对象的任何对象的状态。

我可以为其背后的图纸和逻辑提供单独的类吗?

不仅可以,您绝对应该

如果这是我的项目,我会考虑执行以下操作:

  • 首先,创建一个非GUI Sudoku模型类。这可能包括:
    • sudokucellvalue枚举(命名您想要的内容),一个可以保持1到9的值以及可能的空值(尽管您可以使用null来表示此)
    • sudokucell对象,具有布尔可编辑的对象,并具有上述枚举的单一价值。
    • sudokugrid对象,9 x 9的sudokucells。
    • 一种将侦听器引入模型的机制,以便将其通知状态的变化 - 即,一个或多个Sudokucell对象持有的sudokucellvalue的变化。视图(GUI)将是该模型的主要听众之一,并在模型的状态变更器时更改其显示。
  • 我会创建一个视图类,这意味着GUI,
    • 一个对其模型的参考(请参见上文)
    • 和一个将听众附加到其模型的人 - 我喜欢使用属性changelisteners
    • 我会用jtextfields的网格将其连接起来,
    • 这些文本字段将使用DocumentFilter允许用户清除字段或仅输入1到9个单位数字文本。
    • 将根据相应的模型单元格的可编辑状态启用输入(或者更好的输入)。
  • 我会创建一个控制器,该控制器可以控制视图和模型之间的某些通信。

使用此类型的设置,外部类可以收听对模型的更改,并且不必直接访问视图的JTEXTFIELD。

,如果您在logic类可以拨打的drawsudoku类中包含公共方法,则无需访问文本字段本身。这将非常类似于为私人变量编写Getter和Setter方法。例如,如果您希望您的逻辑类能够将数字" 6"写入板上的某个正方形,则可以在drawsudoku中编写一种方法:

public void setSquareText(String text, int row, int column) {
   // change the appropriate text field here
   textField.setText(text);
}

然后,通过制作图纸类的实例在您的逻辑类中调用此方法:

DrawSudoku drawer = new DrawSudoku();
drawer.setSquareText("6", 1,1);

另外,您可以在drawsudoku中编写一种返回给定的jtextfield的方法,例如:

public JTextField getTextField(int row, int column){
    // find the appropriate text field, then return it
    return textField;
}

然后,在您的逻辑类中调用此方法以访问JTEXTFIELD,因此:

JTextField textField = drawer.getTextField(1,1);
textField.getText();
textField.setText("6");

相关内容

最新更新