Проблемы с GWT Flextable - PullRequest
       3

Проблемы с GWT Flextable

0 голосов
/ 04 января 2012

Я недавно создал flextable, используя GWT 2.4, используя этот код:

@uiBinder Flextable flextable;

В конструкторе я вызываю setupFlexTable () после того, как я

initWidget(uiBinder.createAndBindUi(this));

и затем создается экземпляр flexTable.Я пропустил эту часть.Использование setText () работает.

 //Header row
    private void setupFlexTable() {
            flexTable.setText(0, 0, "Label One");
            flexTable.setText(0, 1, "Label Two");
    }

setWidget не отображался, но это то, что я использовал:

int numRows = flexTable.getRowCount();
        flexTable.setWidget(numRows, 0, new Label("Label One"));
        flexTable.setWidget(numRows, 1, new Label("Label Two"));
        flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);

Здесь я добавляю строки, и этот код работает с setWidget():

@Override
    public void setRowData(Data data) {
        int rowCount = flexTable.getRowCount() + 1;
        flexTable.setWidget((rowCount), 0, new Label(data.getDataName()));
        flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);
        flexTable.setWidget((rowCount), 1, new Label(data.getData()));
        flexTable.getFlexCellFormatter().setRowSpan(rowCount, 1, 2);
    }

Также, когда я использую flexTable.setText ("Label One");и т.д. ... он отображается, но когда я использую setWidget (), это не так?

Другая проблема заключается в том, что мне нужно синхронизировать эту таблицу со списком файлов над ней, но, используя Firebug, я вижу, что, если я динамически добавляю в таблицу две строки, она показывает rowCount, равный 4?Это выдает ошибку индекса за пределами границ, когда я пытаюсь удалить строку, и она достигает одной из этих пустых строк.

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

int rows = flexTable.getRowCount(); 

        for(int i=0; i < rows; i++){
//Match the text in the first field in order to know the proper row to delete.
            if(flexTable.isCellPresent(i,0) && flexTable.getText(i, 0).equalsIgnoreCase(fileName)){
                flexTable.removeRow(i);
                break;
            }
        }

Так может кто-нибудь объяснить, почему setWidget () ничего не отображает и почему я получаюдополнительная пустая строка для каждого, что я добавляю?

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Вы не должны создавать экземпляр FlexTable в своем коде - GWT сделает это за вас. Как только вы сделаете new FlexTable, вы работаете над новым объектом, а не над тем, который включен в ваш виджет. В опубликованном вами коде есть одна переменная с именем flextable, а другая с именем flexTable - легко представить себе некоторую путаницу.

Я думаю, что другие ваши проблемы могут стать более ясными, если вы правильно настроите их.

0 голосов
/ 06 апреля 2014

В настоящее время FlexTable использует устаревшие атрибуты элемента, выравнивают высоту по ширине и т.д. элемента td.Начиная с HTML5, они больше не поддерживаются.GWT должен изменить FlexTable и другие классы, переопределяющие HTMLTable, чтобы использовать CSS вместо этих очень старых атрибутов элемента!

0 голосов
/ 05 января 2012

Я неправильно установил строку, столбец, виджет в первый раз.Глупая синтаксическая проблема.Это правильный код для первого выпуска.

flexTable.setWidget(0, 0, new Label("Label One"));

Вот ответ на второй вопрос.

Это была оскорбительная строка кода:

flexTable.getFlexCellFormatter().setRowSpan(rowCount, 0, 2);

Предполагается, что это строка, столбец, строкаи я его перепутал, поэтому он добавлял пустые строки.

...