[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