Вставьте данные в TableModel.addRow в Blackberry TableView

Мне нужно создать таблицу, в которой необходимы 3 столбца и может быть несколько строк. Я использую BlackBerry API версии 6. Я отладил свой код, и он дает IllegalArgumentException. Я не могу разобраться с этой ошибкой.

Мой код выглядит следующим образом:

public class designTableLayout extends MainScreen{

    TableModel theModel = new TableModel();
    theView = new TableView(theModel);
    TableController theController = new TableController(theModel, theView,
                                                        TableController.FIELD_FOCUS);
    theView.setController(theController);

    HeaderTemplate theTemplate = new HeaderTemplate(theView, 1, 3);
    theTemplate.createRegion(new XYRect(0,0,1,1));
    theTemplate.createRegion(new XYRect(1,0,1,1));
    theTemplate.createRegion(new XYRect(2,0,1,1));
    theTemplate.setRowProperties(0, new TemplateRowProperties(60));
    theTemplate.setColumnProperties(0, new TemplateColumnProperties(40));
    theTemplate.setColumnProperties(1, new TemplateColumnProperties(40));
    theTemplate.setColumnProperties(2, new TemplateColumnProperties(40));
    theTemplate.useFixedHeight(true);
    theView.setDataTemplate(theTemplate);

    theModel.addRow(new String[]{"the","quick","brown"});// problem arises here
    theModel.addRow(new String[]{"jumps","over","the"});
    theModel.addRow(new String[]{"dog","the","quick"});
    add(theView);
}

class HeaderTemplate extends DataTemplate {
    LabelField field1 = new LabelField("field1");
    LabelField field2 = new LabelField("field2");
    LabelField field3 = new LabelField("field3");

    public HeaderTemplate(DataView view,int rows,int columns){
        super(view, rows, columns);
    }

    public Field[] getDataFields(int modelRowIndex) {
         TableModel theModel = (TableModel) getView().getModel();

         //Get the data for the row.
         Object[] data = {field1, field2, field3};
         data = (Object[]) theModel.getRow(modelRowIndex);

         //Create a array to hold all fields.
         Field[] theDataFields = new Field[data.length];
         theDataFields[0] = new LabelField(field1/*, DrawStyle.ELLIPSIS*/);
         theDataFields[1] = new LabelField(field2/*, DrawStyle.ELLIPSIS*/);
         theDataFields[2] = new LabelField(field3/*, DrawStyle.ELLIPSIS*/);

         return theDataFields;
    }

}

person techniqez    schedule 17.11.2012    source источник
comment
@Nate Нейт Сэр, мне нужна помощь по приведенному выше коду. Пожалуйста, посмотрите на это и предложите правильный шаг, чтобы получить решения :(   -  person techniqez    schedule 19.11.2012


Ответы (1)


Я знаю, что вы, вероятно, используете часть этого кода только для проверки своей табличной модели, но я думаю, что ваш шаблон должен выглядеть примерно так:

class HeaderTemplate extends DataTemplate {

    public HeaderTemplate(DataView view,int rows,int columns){
        super(view, rows, columns);
    }

    public Field[] getDataFields(int modelRowIndex) {
         TableModel theModel = (TableModel) getView().getModel();

         //Get the data for the row.
         Object[] data = (Object[]) theModel.getRow(modelRowIndex);

         //Create a array to hold all fields.
         Field[] theDataFields = new Field[data.length];
         theDataFields[0] = new LabelField((String)data[0], DrawStyle.ELLIPSIS);
         theDataFields[1] = new LabelField((String)data[1], DrawStyle.ELLIPSIS);
         theDataFields[2] = new LabelField((String)data[2], DrawStyle.ELLIPSIS);

         return theDataFields;
    }

}

А затем добавьте свои данные как Object[]:

theModel.addRow(new Object[]{"the","quick","brown"});

Вот пример для BlackBerry

person Nate    schedule 19.11.2012
comment
Моя модель стола начала работать именно так, как я хотел. Спасибо, сэр:) - person techniqez; 20.11.2012