SetFocusable方法或Focusing Components Java

Nic*_*las 4 java methods swing jpanel focusable

我遇到了这段代码:

public class Board extends JPanel implements ActionListener{


    public Board(){

    setFocusable(true); 

    }

}
Run Code Online (Sandbox Code Playgroud)

如果我将setFocusable设为true,那么该方法究竟对JPanel的对象做了什么?关注组件的概念是什么?

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

Mod*_*ens 8

focusable标志指示组件是否可以在请求时获得焦点.默认情况下,JPanel组件是可聚焦的,因此当您将其设置为时,不会更改任何内容true.

无法聚焦的组件无法获得焦点.

一个例子

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

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

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

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

请注意,setFocusable本身不设置焦点,它只是提供了可能获得焦点的功能.

  • @Nicholas我更新了答案.我希望这个例子更加清晰.通常情况下,如果您需要能够对某个组件执行某些操作,则可以使组件获得焦点.请注意,setFocusable本身不设置焦点,它只是提供了可能获得焦点的功能. (2认同)