Напишите в jtable по строкам [дубликат]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
12
задан Jops 18 February 2014 в 16:31
поделиться

2 ответа

MultiSpanCellTableExample демонстрирует, как объединить ячейки, создав пользовательский TableUI. Кажется, что проблема в этом примере вызывает StackOverflowError, по крайней мере, на Java 6. Чтобы исправить это, внутри AttributiveCellTableModel.setDataVector() замените:

setColumnIdentifiers(columnNames);

на:

this.columnIdentifiers = columnNames;

IE:

public void setDataVector(Vector newData, Vector columnNames) {
    if (newData == null)
        throw new IllegalArgumentException(
                "setDataVector() - Null parameter");
    dataVector = new Vector(0);
    // setColumnIdentifiers(columnNames);
    this.columnIdentifiers = columnNames;
    dataVector = newData;

    cellAtt = new DefaultCellAttribute(dataVector.size(),
            columnIdentifiers.size());

    newRowsAdded(new TableModelEvent(this, 0, getRowCount() - 1,
            TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
}

Проблема заключается в том, что setColumnIdentifiers вызывает setDataVector, поэтому запускает StackOverflowError. Как только это исправлено, вот как выглядит пример:

enter image description here [/g2]

Существует также готовое решение из JIDE , к сожалению, это не является бесплатным. Вот, например, CellSpanTable:

enter image description here [/g3]

16
ответ дан tenorsax 18 August 2018 в 13:45
поделиться
  • 1
    Я много лет использую JIDE. API чрезвычайно богат, то есть, если вы можете себе это позволить. Я считаю, что у них может быть студенческая версия. Не уверен. Сделайте google для jidesoft. – D-Klotz 25 February 2014 в 18:13

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

Я мог бы просто исправить это, заменив строку:

cellFrame.width = aColumn.getWidth() + columnMargin;

на:

cellFrame.width = aColumn.getWidth() + columnMargin - 1;

Я знаю, никто не спросил, но я надеюсь, что это кому-то поможет. :)

5
ответ дан Candamir 18 August 2018 в 13:45
поделиться
  • 1
    благодаря! найти исправление, прежде чем даже обнаружить проблему является лучшим! – Xerus 18 September 2017 в 19:16
Другие вопросы по тегам:

Похожие вопросы: