我有一个 JavaFX 应用程序。它现在的工作方式是创建一个 GridPane
并调用一个函数,该函数接受一个对象的 Arraylist,其中每个对象由一个 Label
、TextField
和 {{1} } 以该顺序。所述函数将所有这些节点单独添加到 Label
,然后将 GridPane
添加到 GridPane
。在设置 Scene
之前,我尝试在单独的函数中为所有 Stage
对象设置事件处理程序。在那里,我尝试获取光标当前正在等待的 TextField
,以决定 Textfield
将采取什么行动。我尝试在单独的函数中使用 Scene.getFocusOwner 来获取当前选择的 TextField 但它总是返回 Null,当它应该返回一个我可以转换为 Textfield
的对象时(即使在应用程序启动之后)。相关代码如下:
TextField
'setEventEntryHandlers' 函数内部
//How the start function looks
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Warehouse Form");
ArrayList<FormRow> entryRows = new ArrayList<>();
//each array holds same number of Strings
String deflabels[] = {"....","....",....};
String defTextEntry[] = {"....",....};
String defConflabels[] = {"....",....};
GridPane g = runDefaultForm(entryRows,deflabels,defTextEntry,defConflabels);
final Scene sc = new Scene(g,500,600);
setEntryEventHandlers(g,sc,primaryStage,entryRows);
primaryStage.setScene(sc);
primaryStage.show();
}
调用Scene.getFocusOwner的函数...
public void setEntryEventHandlers(GridPane g,Scene sc,Stage st,ArrayList<FormRow> formRows){
int row = 0,col = 0;
TextField curTextEntry = null;
TextField nextTextEntry = null;
Label curConflabel = null;
Label curLabel = null;
//Iterate through every field and set event handler,goes down via row
for(int i = 0; i < fieldsAdded; i++){
curLabel = (Label)getNodeFromGrid(g,i,col);//Gets Label from coordinates
curTextEntry = (TextField) getNodeFromGrid(g,col + 1);//Gets Entry Textfield from Coordinates
nextTextEntry = (TextField)getNodeFromGrid(g,i + 1,col + 1 );//Gets the Next Text Entry from coordinates
curConflabel = (Label)getNodeFromGrid(g,col + 2);//
//function call that contains Scene.getFocusOwner
TextField tempFocus = getFocusFromGrid(g,formRows,userSelectedCoordinates);
if(tempFocus == null){
System.out.println("TEXTFIELD IS NULL BABY");
}
else{
System.out.println("ALL IS GOOD");
}
.
.
.
}
}
所以调用 Scene.getFocusOwner 总是返回 null,我什至不确定我是否设置了所有这些 uupright 或者我是否可以使用函数调用从 start 函数开始的两个函数(可以这么说)。任何帮助将不胜感激。