Java - 画数独 - 如何以正确的方式构建代码?

标签 java swing jframe jpanel jtextfield

(一般性问题)

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

我想使用 JFrame 并在其上构建带有 TextFields 的 JPanel(用户应该“解决”数独)。

我有一个名为“DrawSudoku”的类,它绘制一个空板。 我必须先画一个空板,以便“用户”可以在其中输入数字。 在那个板上我必须检查一些逻辑。所以我必须访问文本字段本身。

到目前为止,这就是我所做的一切。现在我正在考虑用板子背后的“逻辑”构建另一个类。

但是我遇到了一个问题 如何从另一个类获取 JPanel 上存在的 JTextFields?

我可以为绘图和背后的逻辑开设单独的类(class)吗?
谢谢!

最佳答案

On that board I have to check some logic. So I have to access the textFields themselves.

不一定

How do I get the JTextFields that exists on the JPanel, from another class?

如何通过访问器或“getter”方法从另一个对象评估任何对象的状态。

Can I have separate classes for the Drawing and Logic Behind it?

您不仅可以,而且绝对应该

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

  • 首先,创建一个非 GUI Sudoku 模型类。这可能包括:
    • SudokuCellValue 枚举(将其命名为您想要的名称),一个可以保存 1 到 9 之间的值以及可能为 EMPTY 值的枚举(尽管您可以使用 null 来表示此值)<
    • SudokuCell 对象,具有 boolean 值可编辑性,并为上述枚举保存单个值。
    • SudokuGrid 对象,一个 9 x 9 的 SudokuCells 网格。
    • 一种将监听器 Hook 到模型中的机制,以便它们收到状态更改的通知,即一个或多个 SudokuCell 对象保存的 SudokuCellValue 的更改。 View (GUI)将是该模型的主要监听者之一,并且当模型的状态改变时将改变其显示。
  • 我会创建一个 View 类,即 GUI,
    • 保存对其模型的引用(见上文)
    • 以及将监听器附加到其模型的一个 - 我喜欢为此使用 PropertyChangeListeners
    • 我将它与 JTextFields 网格连接起来,
    • 这些文本字段将使用 DocumentFilter 来允许用户清除字段或仅输入 1 到 9 个单位数字文本。
    • 将根据相应模型单元格的可编辑状态启用输入(或者可能更好 - 可聚焦输入)。
  • 我会创建一个 Controller 来控制 View 和模型之间的一些通信。

通过这种类型的设置,外部类可以监听模型的更改,而不必直接访问 View 的 JTextFields。

关于Java - 画数独 - 如何以正确的方式构建代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610910/

相关文章:

java - 无法通过类型转换为类型

java - List<integer> c1=new Arraylist<integer>c1 是什么类型的对象

java - 设置 JTextField 在 JRadioButton Click 上可见

java - Scrollpane中的jList,查找并显示selectedIndex的值

java - 可运行 JAR 未检测到 logback.xml 配置

java - 在 JFrame 中隐藏某些控件时控件的位置发生变化

java - 如何将 Java 窗口(实际上是 JFrame)设置为正确的分辨率?

java - 将字符串转换为日期,几乎完成了!

Java XML 与 namespace 问题

java - JFrame.setBounds 不适用于小值