Я много искал и получил ответы на этот вопрос, но многие из них ссылались на ссылки, которые дают ошибку 404. Я хочу сделать таблицу, как это:Как слить ячейку в DefaultTableModel/JTable?
Есть ли способ в Java для этого?
Я много искал и получил ответы на этот вопрос, но многие из них ссылались на ссылки, которые дают ошибку 404. Я хочу сделать таблицу, как это:Как слить ячейку в DefaultTableModel/JTable?
Есть ли способ в Java для этого?
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
. После того, как фиксированные, это как пример выглядит следующим образом:
Существует также готовое решение от JIDE, к сожалению, это не бесплатно. Вот, например CellSpanTable
:
Я уже много лет использую JIDE. API чрезвычайно богат, то есть, если вы можете себе это позволить. Я считаю, что у них может быть студенческая версия. Не уверен. Сделайте google для jidesoft. –
MultiCellSpanTableExample это хорошо, но у него есть небольшая проблема, которая может стать огромной проблемой, если таблица имеет слишком много столбцов. Как вы можете видеть в файле example, представленном тенорсаксом, очевидно, что каждый столбец таблицы имеет дополнительный пиксель в своей ширине. Эти дополнительные пиксели складываются, делая каждый столбец более смещенным, чем последний.
Я мог бы просто исправить, заменив строку:
cellFrame.width = aColumn.getWidth() + columnMargin;
с:
cellFrame.width = aColumn.getWidth() + columnMargin - 1;
Я знаю, что никто не спрашивал, но я надеюсь, что это поможет кому-то. :)
спасибо! найти исправление, прежде чем даже обнаружить проблему является лучшим! – Xerus
В одном из моих проектов я использую [этот SpanTable] (https://code.google.com/p/spantable/source/browse/SpanTable/src/main/java/spantable/?r=b5aa2f0d7bc6e0ced427562dcc22396b41963948). В другом я использую заголовок группы из [этого SO-ответа] (http://stackoverflow.com/a/11666046/2894369). Попробовать их. – alex2410
Вы должны проверить [это] (http://www.java3z.com/cwbwebhome/article/article5/swing_example/JTableExamples4.html) и/или [это] (http://www.java2s.com/Code/Java /Swing-Components/MultiSpanCellTableExample.htm). – Qiu
@Qui Исключение в потоке «main» java.lang.StackOverflowError –