[Java lista] JTable adatainak beírása lassú-Tabla oszlopsorrend , szélessége, lementése és hasonlók
Fábián Zoltán
fz at szily.hu
2006. Nov. 9., Cs, 20:03:21 CET
Nem közvetlenül, de nekem ehhez kapcsolódó a kérdés.
A korábbi levelemben működő JTable. A kuncsaft azt szeretné, hogy ahogy
előzőleg hagyta az átrendezett oszlopok sorrendjét, láthatóságát,
szélességét, másnap ugyanúgy jelenjen meg a táblája.
- Láthatóságot úgy oldottam meg, hogy 0-ra állítom a láthatatlant. Ennél
van-e jobb, figyelembe véve, ha a modellből kiveszek vagy hozzáadok egy
oszlopot, akkor kezelnem kell a szerveroldali lekérdezés oszlopneveit is.
- A szélességét kezelése külön tömbben lekérdezem - tiszta sor és elmentem a
szerver oldalon.
A sorrend volt a legnagyobb szívás, nem is tetszik.
Írtam egy listener-t (minta lapján) Amikor az egérrel elviszem az oszlopot,
akkor a háttérben elmozdul egy másik oszlop is az ellenkező irányba és jön
az esemény, amit lekell kezelni.
A módosult oszlopindexeket lementem egy tömbbe és ezt tárolom a szerveren.
Az ID oszlopot (0.) nem szabad átrendezni, mert ráadásul nem is látható,
ezért ha azt akarják átmozgatni, ki kell kapcsolni az újrarendezhetőséget,
majd vissza miután elmúlt a veszély.
A fentiekre van valami jó megoldása, ötlete valakinek, különösen az
oszlopsorrendre?
Fabio
A kódrészlet az oszlopok átrendezésére
private class MyTableColumnModelListener implements TableColumnModelListener
{
...
public void columnMoved(TableColumnModelEvent e) {
int fromIndex = e.getFromIndex(); //A látható
dataindexe!
int toIndex = e.getToIndex(); //Az eredeti
modellindex
//Ha csak a sorrend változott, akkor nem kell újraszámolni
az oszlopokat
if(fromIndex == toIndex) return;
JTableHeader h = Table.getTableHeader();
boolean re = h.getReorderingAllowed();
if( (re) &&
(toIndex != fromIndex) && // Ha a
háttérben megy az átvonszolás
( (toIndex == 0) || // Ha a
táttér a 0. oszlopba akar rándulni
(toIndex == 1) || // Ha a
háttér az első oszlopba akar rándulni
(fromIndex==1 && toIndex == 2)) //Ha az ID
oszlop jobbra akarna mozdulni
)
{
h.setReorderingAllowed(false);
Table.moveColumn(toIndex, fromIndex);
ut.test("Az ID oszlop nem mozdulhat a helyéről");
}else{
if(re){
//Ide akkor jön, ha lehet oszlopokat
csereberélni
setTableColOrder(col_order);
//Oszlopsorrend lementése tömbbe
h.setReorderingAllowed(true);
}else{
//Itt akkor van, amikor a 0. és/vagy az első
oszlopot cseréli vissza!
h.setReorderingAllowed(true);
}
}
// fromIndex and toIndex identify the range of columns being
moved.
// In the case of a user dragging a column, this event is fired
as
// the column is being dragged to its new position. Also, if the
// column displaces another during dragging, the fromIndex and
// toIndex show its new position; this new position is only
// temporary until the user stops dragging the column.
}
public void columnMarginChanged(ChangeEvent e) {
// The width of some column has changed.
// The event does not identify which column.
TableColumn column =
Table.getTableHeader().getResizingColumn();
if(column == null) return;
int idx = column.getModelIndex();
int i = ViewPhysIndex(idx,col_text);
col_width[i] = column.getWidth();
}
}
További információk a(z) Javalist levelezőlistáról