(一般性问题)
我有一个作业,其中我必须构建一个数独,我考虑了构建它的类/逻辑,并认为我可以使用建议。
我想使用 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)将是该模型的主要监听者之一,并且当模型的状态改变时将改变其显示。
- SudokuCellValue 枚举(将其命名为您想要的名称),一个可以保存 1 到 9 之间的值以及可能为 EMPTY 值的枚举(尽管您可以使用
- 我会创建一个 View 类,即 GUI,
- 保存对其模型的引用(见上文)
- 以及将监听器附加到其模型的一个 - 我喜欢为此使用 PropertyChangeListeners
- 我将它与 JTextFields 网格连接起来,
- 这些文本字段将使用 DocumentFilter 来允许用户清除字段或仅输入 1 到 9 个单位数字文本。
- 将根据相应模型单元格的可编辑状态启用输入(或者可能更好 - 可聚焦输入)。
- 我会创建一个 Controller 来控制 View 和模型之间的一些通信。
通过这种类型的设置,外部类可以监听模型的更改,而不必直接访问 View 的 JTextFields。
关于Java - 画数独 - 如何以正确的方式构建代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610910/