5

我遇到了这段代码:

public class Board extends JPanel implements ActionListener{

    public Board() {
        setFocusable(true); 
    }
}

setFocusable(true)JPanel 对象究竟做了什么?一个组件被聚焦的概念是什么?

该方法基于Java API,位于JPanel 的超类Component 类中。方法描述声明“将此组件的可聚焦状态设置为指定值。此值覆盖组件的默认可聚焦性。” 这个描述对我来说听起来太技术性和高级术语了(他刚刚在夏天完成了一个 Java 课程)。有时,我认为这些方法描述并不是为所有具有不同 Java 知识水平的人编写的。有人可以用外行的方式解释方法描述吗?

4

3 回答 3

10

focusable标志指示组件是否可以在请求时获得焦点。JPanel 组件默认是可聚焦的,所以当你将它设置为true.

不可聚焦的组件无法获得焦点。

一个例子

假设您已经实现了一个包含多个文本字段的对话框,并且您希望用户输入一些文本。当用户开始输入时,一个文本字段需要成为应用程序的焦点:它将是接收键盘输入的字段。

当您实现焦点遍历(用户从一个文本字段跳转到下一个文本字段的便捷方式,例如使用tab按钮)时,用户可以“跳转”到下一个文本字段。应用程序将尝试获得下一个字段的焦点,以准备接收文本。当下一个字段不可聚焦时,该请求将被拒绝并测试下一个字段。例如,您不希望标签获得焦点,因为您无法在其中输入文本。

true默认情况下,可聚焦标志在Component类中设置为。当你构造一个从类派生的对象Component时(例如,当你构造你的JPanel)时,Component类的构造函数被调用并将默认的可聚焦标志设置为true

希望覆盖此默认值的派生类可以调用该方法setFocusable来更改该默认值,就像您在示例中所做的那样。

请注意,setFocusable 本身并不设置焦点,它只是提供了潜在地获得组件焦点的能力。

于 2012-12-30T22:08:34.753 回答
0

setFocusable()实际上是ComponentSwing 类中的一个方法。

public void setFocusable(boolean focusable)

它使组件(在您的情况下JPanelextends Component)具有集中注意力的能力。它实际上并没有设置要聚焦的组件,它只是指示组件是否可以聚焦,这由传递的布尔参数决定。

于 2015-08-04T08:41:21.047 回答
0

您可以使用setFocusable(boolean n),它主要用于在触觉/鼠标模式和键盘(光标)中激活或停用视图的焦点事件(选择接收输入的图形用户界面的组件)模式。

于 2019-06-24T12:43:15.143 回答