SetFocusable方法或Focusing Components Java

时间:2012-12-30 21:49:42

标签: java swing methods jpanel focusable

我遇到了这段代码:

public class Board extends JPanel implements ActionListener{


    public Board(){

    setFocusable(true); 

    }

}

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

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

3 个答案:

答案 0 :(得分:7)

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

无法对焦的组件无法获得焦点。

示例

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

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

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

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

请注意,setFocusable本身并未设置焦点,它只是能够将焦点集中到组件上。

答案 1 :(得分:0)

setFocusable()实际上是来自组件类的方法。

public void setFocusable(boolean focusable)

它允许组件(在您的情况下, JPane l 扩展 组件)获得聚焦的力量。它并没有实际设置要聚焦的组件。它只是指示Component是否可以聚焦,因为它包含一个要传递的布尔参数。

答案 2 :(得分:0)

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