自动滚动垂直领域管理器



我开发了一个带有简单聊天功能的黑莓应用程序。当用户单击Send时,聊天消息将出现在Vertical Field Manager (VFM)中。用户可以发送多条消息。发送的每条新消息都显示在旧消息的下面。这样,Vertical Field Manager的大小不断增大。我已经创建了一个可滚动的VFM,因此用户可以通过向下滚动查看发送的最新消息。是否有可能在发送消息时自动滚动到VFM的底部,以便将焦点设置在最后一条消息上?

我试过呼叫vfm.setVerticalScroll(int y);以及LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT|Field.FOCUSABLE);,但这没有帮助。请指导。

vr2 = Vertical Field Manager

chat1 =聊天消息添加到VFM


EDIT:我在StackOverFlow上看到了这个链接,并在我的代码中应用了如下更改:

vr2.setVerticalScroll(vr2.getVirtualHeight());
LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
 protected void applyTheme(Graphics g, boolean arg1) 
     {
        g.setColor(Color.DEEPSKYBLUE);
        super.applyTheme(g, arg1);
     }
};
Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1);  //getFieldCount, gets total number of fields
f.setFocus();

这使我非常接近我正在寻找的解决方案。VFM在下面滚动。但是,它不是定位到VFM中的最后一个消息,而是每次都滚动到最后第二个消息。为什么会这样呢?它应该滚动到VFM中的最后一条消息;

我终于设法解决了这个问题。我将分享我的答案,以防其他人也遇到这样的问题。虽然我上面的问题中的编辑帮助我更接近解决方案,但我发现错误在于没有在正确的位置调用vr2.setVerticalScroll(vr2.getVirtualHeight());

有关详细信息,请在stackoverflow和黑莓支持论坛上查看此问题。解决方案如下:

LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
 protected void applyTheme(Graphics g, boolean arg1) 
     {
        g.setColor(Color.DEEPSKYBLUE);
        super.applyTheme(g, arg1);
     }
};
Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.setVerticalScroll(vr2.getVirtualHeight()); //scrolls to the bottom of the vertical field manager
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1);  //getFieldCount, gets total number of fields
f.setFocus(); //sets focus on the newly added field

最新更新