我是新来的,如果这件事在我还没看过的地方被处理的话,很抱歉。
我正在用Java构建一个Sudoku作为一个学习项目,我允许用户在表单的左上角TextField中输入一个81个字符串,这样可以更快地将游戏加载到主板上。我知道必须有一种更简洁的方法来做到这一点。我目前的计划是:
fxml中的.Initialize全部为81 TextFields。
<TextField fx:id="tf24" maxWidth="21.5" > </TextField>
<TextField fx:id="tf25" maxWidth="21.5" > </TextField>
<TextField fx:id="tf26" maxWidth="21.5" > </TextField>.Have : Controller中的一种方法,它将数据传递给主类以供以后使用,并将81个字符串分解并打印到游戏板上。
public void getBoard() {
if (tf11.getLength() == 81) {
String gameString = tf11.getText();
for (int x = 81; x >= 1; x--) {
int correction = ((x + 10) + ((x-1) / 9));
Main.inputBoard(gameString, correction);
gameString = gameString.substring(0, gameString.length() - 1);
}
.
.
.
tf26.setText(tf11.getText().substring(tf11.getLength()-1));
tf11.setText(tf11.getText(0,tf11.getLength()-1));
tf25.setText(tf11.getText().substring(tf11.getLength()-1));
tf11.setText(tf11.getText(0,tf11.getLength()-1));
tf24.setText(tf11.getText().substring(tf11.getLength()-1));
tf11.setText(tf11.getText(0,tf11.getLength()-1));
.
.
.
}
}.Have :主类中接受数据并将其存储在数组中的方法。
public static void inputBoard(String gameString, int correction) {
board[correction] = gameString.substring(gameString.length()-1);
}两天来,我一直在努力寻找更好的方法来做这件事。如果我可以通过引用一个包含TextField的fx:id名称的字符串来调用TextField的TextField方法,这将是非常容易的,但是我还没有找到任何好的方法来做到这一点。为了自己处理这个问题,我读了一些东西,包括:
How do I invoke a Java method when given the method name as a string?
How to create an array of TextFields in JavaFX
https://docs.oracle.com/javase/7/docs/api/java/awt/TextField.html
To initialize or to not initialize JavaFX TextField
任何指导都将不胜感激!
发布于 2018-12-14 21:16:22
好的,但是为什么不用您需要的字段创建您自己的类,例如使用id等,您可以在需要的情况下扩展TextField,然后得到TextField和唯一的id
我不认为你能正确地得到fx:id
正如我所看到的,你混淆了很多逻辑--你需要把它分开
尝试创建自己的类并从TextField扩展,并使用新的扩展TextField
我认为它应该能解决你的问题
https://stackoverflow.com/questions/53786814
复制相似问题