LWUIT表格布局嵌入式TextAreas

时间:2011-07-12 07:31:45

标签: java-me lwuit

我的目标是通过解析XML文件来显示表。

我正在使用SAX Parser,内容有 multirows ,我想要 表宽度适合到显示屏。当然Y_AXIS滚动就可以了。

现在,我正在使用src / com / sun / lwuit / html /的 HTMLTableModel ,而且它是相应的 HTMLTable 。为此我宣布它的方法公开,所以我可以访问它们。这到目前为止工作正常。这允许我在不知道其大小的情况下声明表格。

为了允许多行,我将TextAreas嵌入到单元格中。

现在出现问题:HTMLTable需要t.setScrollableY(true),否则不会显示所有行。

这会导致表格在X方向上有点大,因此不显示右边框。 底部边框也不会一直显示。

嵌入表格的容器包含 BorderLayout.Y_AXIS 。 我试过的事情: t.setPreferredW(mainContainer.getLayoutWidth());这确实减少了表的大小,但是表格没有显示所有行,例如没有t.setScrollableY(true).

t.setLayout(new BoxLayout(BoxLayout.Y_AXIS))这会导致java/lang/ClassCastException

有什么想法吗?提前谢谢。

摘自我的代码:

} else if (qName.equalsIgnoreCase("td")) {

                    if (sb.length() > 0) {
                        String sbt = new String(sb);
                        sb.delete(0, sb.length());
                        TextArea c = new TextArea(sbt);
                        c.setEditable(false);
                        c.getStyle().setFont(smallFont);
                        table.addCell(c, false, null);
                    }
                } else if (qName.equalsIgnoreCase("tr")) {
                    debugPrint("Row closed.");
                    table.commitRow();
                } else if (qName.equalsIgnoreCase("table")) {
                    HTMLTable t = new HTMLTable(table);
                    //without scrollable Y not all table rows are shown
                    t.setScrollableY(true);
                    //t.setPreferredW(screenWidth);
                    //this is verboten.
                    t.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
                    mainContainer.addComponent(t);
                    tableBool = false;

1 个答案:

答案 0 :(得分:1)

您不能从表格布局更改表格的布局,否则它不会是表格。

应该可以让表格填充父BoxLayout_Y的宽度,方法是将表格列的宽度百分比分配到100%,例如对于3列表返回分配33,33& 44。

这可以通过继承table并覆盖方法来实现:

protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
    TableLayout.Constraint c = super.createCellConstraint(value, row, column);
    c.setWidthPercentage(whateverYouWant);
    return c;
}