Java BlackBerry垂直居中LabelField,具有自定义高度

Java BlackBerry垂直居中LabelField,具有自定义高度,java,blackberry,labelfield,Java,Blackberry,Labelfield,我在TableLayoutManager行中嵌套了一个LabelField。我希望行具有特定的高度(与其位图背景相同的高度)。为了实现这一点,我更改了嵌套LabelField的layout()方法: LabelField lblHours = new LabelField(hours, Color.BLACK, Manager.FIELD_VCENTER) { protected void layout(int width, int height) {

我在TableLayoutManager行中嵌套了一个LabelField。我希望行具有特定的高度(与其位图背景相同的高度)。为了实现这一点,我更改了嵌套LabelField的layout()方法:

LabelField lblHours = new LabelField(hours,
            Color.BLACK, Manager.FIELD_VCENTER) {
        protected void layout(int width, int height) {
            super.layout(width, 40 //height of the bitmap);
            setExtent(width, 40 //height of the bitmap);
        }
    };
这成功地增加了TableLayoutManager行大小。但是,一旦我这样做,LabelField就不再在行内垂直居中。有什么建议吗


谢谢

尝试将
setExtent(width,40)
更改为
setExtent(this.getWidth(),40)
。如果getWidth()试图占用所有可用的宽度(这是您的setExtent()调用所做的),并且由于文本将左对齐绘制,看起来您的字段没有居中,但实际上它只占用了表的整个单元格,那么这可能不起作用。或者,如果这不起作用,您可以执行
setExtent(Math.min(width,this.getFont().getAdvance(this.getText())),40)

尝试将
setExtent(width,40)
更改为
setExtent(this.getWidth(),40)
。如果getWidth()试图占用所有可用的宽度(这是您的setExtent()调用所做的),并且由于文本将左对齐绘制,看起来您的字段没有居中,但实际上它只占用了表的整个单元格,那么这可能不起作用。或者,如果这不起作用,您可以执行
setExtent(Math.min(width,this.getFont().getAdvance(this.getText())),40)

以上答案有效,只需确保为上述内容输入两条语句即可。。如下面的示例所示

LabelField importanceLabel = new LabelField("Importance: ",LabelField.FIELD_VCENTER | LabelField.FIELD_RIGHT) {
          public void paint(Graphics g) { 
              g.setColor(0x145085); 
              super.paint(g); 
          } 
          protected void layout(int width, int height) {
              super.layout(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
              setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
          }
      };

这将是相同的回答。。谢谢你们。。供讨论之用。它帮助了我

上面的答案是有效的,只要确保你为上面的问题写了两个陈述就行了。。如下面的示例所示

LabelField importanceLabel = new LabelField("Importance: ",LabelField.FIELD_VCENTER | LabelField.FIELD_RIGHT) {
          public void paint(Graphics g) { 
              g.setColor(0x145085); 
              super.paint(g); 
          } 
          protected void layout(int width, int height) {
              super.layout(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
              setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
          }
      };

这将是相同的回答。。谢谢你们。。供讨论之用。它帮助了我

你好,jprofitt,谢谢你的帮助。不幸的是,您建议的两种解决方案产生的结果与以前相同……在您进行更改之前,LabelField是否以中心为中心?我的印象是这样的。是的,在我为LabelField设置自定义高度之前,LabelField是垂直居中的。也许不必覆盖布局()尝试将getPreferredHeight()更改为返回40,让它执行正常布局。我已经尝试过了,但它根本没有增加行高,这很奇怪。嗨,jprofitt,谢谢你的帮助。不幸的是,您建议的两种解决方案产生的结果与以前相同……在您进行更改之前,LabelField是否以中心为中心?我的印象是这样的。是的,在我为LabelField设置自定义高度之前,LabelField是垂直居中的。也许不必重写layout(),而是尝试将getPreferredHeight()更改为返回40,让它执行正常布局。我已经尝试过了,但它根本不会增加行高,奇怪的是,我认为您需要提供更多的代码-如何将LabelField添加到TableLayoutManager?嗨,Michael,我有一个切换语句,它基本上贯穿了一周中的每一天(1-7天),对于每种情况,它将实例化扩展TableLayoutManager的自定义类,并将其添加到当前VerticalFieldManager父级。这就是你要找的吗?让我知道,我当然可以提供特定的代码…我认为您需要提供更多的代码-您如何将LabelField添加到TableLayoutManager?嗨,Michael,我有一个切换语句,它基本上贯穿一周中的每一天(1-7天),对于每种情况,它将实例化扩展TableLayoutManager的自定义类,并将其添加到当前VerticalFieldManager父级。这就是你要找的吗?让我知道,我当然可以提供具体的代码。。。