LWUIT Table Layout встроенный TextAreas - PullRequest
1 голос
/ 12 июля 2011

Моя цель - отобразить таблицу с помощью синтаксического анализа XML-файла.

Я использую SAX Parser, и содержимое имеет multirows , и я хочу, чтобы таблица width была равнаустановите на дисплей.Конечно, прокрутка Y_AXIS будет в порядке.

Сейчас я использую HTMLTableModel src / com / sun / lwuit / html /, и это соответствует HTMLTable ,Для этого я объявил, что это общедоступные методы, чтобы я мог получить к ним доступ.Это работает отлично до сих пор.Это позволяет мне объявлять таблицы, не зная их размера преждевременно.

Чтобы разрешить множественные строки, я встраиваю TextAreas в ячейки.

Теперь проблема: HTMLTable t требуется 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 Ответ

1 голос
/ 14 июля 2011

Вы не можете изменить макет таблицы по сравнению с макетом таблицы, иначе это не будет таблица.

Должна быть возможность получить таблицу, чтобы заполнить ширину родительского BoxLayout_Y, назначив процент ширины столбцам таблицы до 100%, например. для таблицы с тремя столбцами возвращаемое значение 33, 33 и 44.

Это может быть достигнуто путем подкласса таблицы и переопределения метода:

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