我需要帮助工作getFocusOwner()。我有一个用Java制作的数独游戏,我想在程序中添加箭头键导航。我做了一些研究,发现使用焦点系统是最好的方法(如果不是,请给我一个更好的方法,我可以研究一下)。
好的,为了测试目的,我正在尝试将焦点设置为SetField,这是一个扩展JTextField的自定义类(自定义因为我想禁用任何非数字的输入)。它已成为焦点。我在网格中间的SetField上调用了requestFocusInWindow(),焦点设置为该组件。当我尝试检索具有焦点的组件时会出现问题。
这就是我正在测试的getFocusOwner()方法:
sGrid[40].requestFocusInWindow();
try{
System.out.println(this.getFocusOwner().getClass().getSimpleName());
} catch(NullPointerException e){
e.printStackTrace();
}
无论我尝试使用哪个组件,我总是得到空指针异常。我尝试使用JButtons,JLabels,甚至是我程序中的JPanels。然而,焦点设置为组件。我可以看到插入符号在预期的SetField中闪烁。有什么我做错了吗?提前感谢您的帮助。
答案 0 :(得分:1)
答案 1 :(得分:1)
我想在程序中添加箭头键导航。
您应该使用Key Bindings。创建一个基本的“ChangeFocusAction”。您将需要此类的4个实例,您可以将其映射到KeyStroke。
假设您有一个包含81个文本字段的数组,可以使用整数值创建Action,该值告诉Action如何更改焦点。例如:
对= -1
左= 1
up = -9
down = 9
ActionEvent的源代码将包含具有焦点的文本字段。然后搜索arry以查找该文本字段的偏移量。然后将上面的int值添加到索引中,并将请求焦点放在该组件上。
答案 2 :(得分:1)
刚刚发现了问题。对于其他遇到此问题的人,请尝试使用(Window).getMostRecentFocusOwner()。这对我有用。