Jak połączyć komórkę w DefaultTableModel / JTable?
Szukałem dużo i dostałem kilka odpowiedzi na to pytanie. ale wiele z nich odnosiło się do linków, które dają błąd 404. Chcę zrobić taki stół:
Czy jest na to jakaś metoda w Javie?
2 answers
MultiSpanCellTableExample pokazuje, jak scalić komórki, tworząc własne TableUI
. Wydaje się, że w tym przykładzie występuje problem, który powoduje StackOverflowError
, przynajmniej w Javie 6. Aby to naprawić, wewnątrz AttributiveCellTableModel.setDataVector()
zastąp:
setColumnIdentifiers(columnNames);
Z:
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));
}
Problem polega na tym, że setColumnIdentifiers
wywołuje setDataVector
, a więc uruchamia StackOverflowError
. Po ustaleniu, tak wygląda przykład:
Istnieje również gotowe rozwiązanie z JIDE , niestety nie jest za darmo. Oto na przykład CellSpanTable
:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 02:23:56
MultiCellSpanTableExample jest w porządku, ale ma mały problem, który może stać się ogromnym problemem, jeśli tabela ma zbyt wiele kolumn. Jak widać w przykładzie podanym przez tenorsax, najwyraźniej każda kolumna tabeli ma dodatkowy piksel w swojej szerokości. Te dodatkowe piksele sumują się, dzięki czemu każda kolumna jest bardziej przesunięta niż poprzednia.
Mógłbym to po prostu naprawić, zastępując linię:
cellFrame.width = aColumn.getWidth() + columnMargin;
Z:
cellFrame.width = aColumn.getWidth() + columnMargin - 1;
Wiem, że nikt nie pytał, ale mam nadzieję, że to pomoże. ktoś. :)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 22:02:58