0

我 正在使用How To 中的复选框创建一个 ListField - 创建一个带有复选框的 ListField
但我不知道如何在该 ListField 中将文本包装成一行。
我为列表字段项中的文本引用了线程 文本换行

这里写成

如果您显示的只是文本,那么我会采用 rab 建议的方法。

我只在 ListField 中显示文本,如果它不适合设备屏幕,我想包装它。
但是我没有得到“rab建议的方法”,其中如何计算?

String [] linesToDraw = 根据行宽计算行数

我被困在这个问题上,所以关于这个问题的任何细节?


用你的逻辑我得到了

* split text on words
* create string array and while words array not empty do
      o create string lineStr
      o while getFont().getAdvance(lineStr+" "+words[i]) < row width move words[i] to lineStr

我正在这样做

if(getFont().getAdvance(lineStr+" "+words[i]) < Display.getWidth())
{
    lineStr += words[i];
}

& 我将 lineStr 存储在 VectorlinesToDraw 中,与我用于存储下一行文本的 lineStr 相同。

&最后我正在做的画

for (int i = 0; i < linesToDraw.size(); i++)
{ 
          String textToDraw = (String)linesToDraw.elementAt(i);
          graphics.drawText(textToDraw, 0, y, 0, w);
          y += fontHeight;
}

但如何计算没有。行和行高的行数?

所以有了这个行高,我可以写 setRowHeight(rowHeight) 因为不同行的行高是不同的。


我没有。根据行宽正确地处理行并将其存储在 Vector 中并且我正在做

int fontHeight = this.getFont().getHeight();

     for (int i = 0; i < linesToDraw .size(); i++)
    {           
        textToDraw = (String)linesToDraw.elementAt(i);
        graphics.drawText(textToDraw, xpos, ypos, 0 , width);
        ypos += fontHeight;
    }

现在它绘制线条但在前一个线条上,因为默认情况下 listField.setRowHeight() 只占用一行。如果有 r 2 行,那么我在 drawListRow() 中写入 setRowHeight(getFont().getHeight()*2) 但然后它进入循环

如果我在创建 ListField 时编写 setRowHeight() ,那么它会正常运行,但是对于所有行都设置了相同的行高。

我在运行时获取要绘制的字符串,并且行高对于不同的行应该是可变的,那么我如何使用什么参数和在哪个方法中设置行高度()?

4

1 回答 1

1

我认为“根据行宽计算行数”是指:

  • 在单词上拆分文本
  • 创建字符串数组,而单词数组不为空
    • 创建字符串 lineStr
    • while getFont().getAdvance(lineStr+" "+words[i]) < row width move words[i] to lineStr

最后你会得到:

  • String[] 行与行的行
  • 行高 = lines.lenght * (getFont().getHeight() + topMargin + bottomMargin)
于 2009-11-28T12:01:22.210 回答