Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry 如何在gridfieldmanager中忽略单元格的焦点?_Blackberry_Blackberry Eclipse Plugin - Fatal编程技术网

Blackberry 如何在gridfieldmanager中忽略单元格的焦点?

Blackberry 如何在gridfieldmanager中忽略单元格的焦点?,blackberry,blackberry-eclipse-plugin,Blackberry,Blackberry Eclipse Plugin,为了回答我的问题,我举了这个例子 publicmyscreen() { setTitle(“GridFieldManager”); GridFieldManager grid2=新的GridFieldManager(1,2,GridFieldManager.FIXED_SIZE); 增加(2); 字符串[]选项={“1”、“2”、“0”}; ObjectChoiceField菜单=新建ObjectChoiceField(空,选项); //grid.add(lol); grid2.添

为了回答我的问题,我举了这个例子

publicmyscreen()
{       
setTitle(“GridFieldManager”);
GridFieldManager grid2=新的GridFieldManager(1,2,GridFieldManager.FIXED_SIZE);
增加(2);
字符串[]选项={“1”、“2”、“0”};
ObjectChoiceField菜单=新建ObjectChoiceField(空,选项);
//grid.add(lol);
grid2.添加(新的LabelField(“产品”,非聚焦);
grid2.添加(菜单);
}
由于某种原因,即使我说labelfield不可聚焦(
Field.non_focusable
),我仍然可以聚焦labelfield

注意:为了让您知道,我使用的是label+objectchoicefield,因此我可以完全控制该标签的属性,因为我发现从objectchoicefield的标签更改颜色和字体很麻烦

在这张图片中,您可以看到焦点是如何集中在
LabelField
上的。我只想关注objectchoicefield列表


老实说,对我来说,这似乎是一个bug。我认为不应该这样。然而,在这一点上,旧的BlackBerry Java设备中的任何东西都不会被修复,所以我们只需要解决它

问题是您已将
LabelField
设置为不可聚焦,但设备忽略了这一点。它打开屏幕时,焦点集中在
GridFieldManager
,这只会将焦点放在它的第一个字段(标签)上。如果用户将焦点移到选择字段,则无法将焦点移回标签字段。但是,我肯定你不希望屏幕打开时聚焦于一些不可聚焦的东西

您可以手动将焦点设置到选项字段:

//grid.add(lol);
grid2.添加(新的LabelField(“产品”,非聚焦);
grid2.添加(菜单);
menu.setFocus();
或者,如果您想更一般地处理此问题,可以编写自己的方法将焦点初始化为第一个真正可聚焦的字段:

公共类LabelFocusScreen扩展主屏幕{
公共LabelFocusScreen(){
超级(主屏幕.垂直滚动条|主屏幕.垂直滚动条);
setTitle(“GridFieldManager”);
GridFieldManager grid2=新的GridFieldManager(1,2,GridFieldManager.FIXED_SIZE);
增加(2);
字符串[]选项={“1”、“2”、“0”};
ObjectChoiceField菜单=新建ObjectChoiceField(空,选项);
//grid.add(lol);
grid2.添加(新的LabelField(“产品”,非聚焦);
grid2.添加(菜单);
初始化焦点(本);
}
/**@如果在给定字段内设置了焦点,则返回true*/
私有布尔初始化焦点(字段f){
布尔焦点集=假;
if(管理器的f实例){
经理m=(经理)f;
//递归地循环所有子字段
对于(int i=0;i
这两种解决方案都适用于您

注意:顺便说一下,您不必将
LabelField
设置为不可聚焦。默认情况下,它是不可聚焦的。不痛。只是不需要


更新: 如果您还希望稍后(在屏幕第一次出现后)能够将焦点设置回
grid2
,也可以再次调用my
initializeFocus()
方法,以防止不可聚焦标签获得焦点时出现任何问题

例如,使屏幕
实现FocusChangeListener
,然后在其构造函数中:

grid2.add(新的LabelField(“Productos”,非聚焦));
grid2.添加(菜单);
grid2.setFocusListener(此);
其中,焦点侦听器实现包括此新方法(在screen类中):

public void focusChanged(字段f,int事件){
if(event==focuschangelister.FOCUS\u){
初始化焦点(f);
}
}

这将允许为
grid2
管理器对象调用
initializeFocus()
,如果稍后将焦点设置回该对象。调用
initializeFocus()
,将网格字段管理器作为参数传递,将正确地将焦点设置为其第一个可聚焦字段。

您好,很抱歉花了这么长时间回答此问题,但无法工作。因此,如果我有两个网格,例如,当我回到第一个网格时,焦点将再次集中在标签字段上。我想我需要一个focuslistener,这样我可以在这个字段有焦点时将焦点设置到其他字段,或者重写“第一个可聚焦字段”,有什么办法吗?@Amig,我已经更新了我的答案来处理这个问题。基本上,您只需添加一个焦点更改侦听器,然后让该侦听器调用网格字段的my
initializeFocus()
方法,以使用搜索第一个焦点字段的逻辑。我测试了这个,它对我有效。Thnx@Nate和往常一样棒极了