[Java lista] JTable adatainak beírása lassú-Tabla oszlopsorrend , szélessége, lementése és hasonlók

Dorogi Pál pal.dorogi at t-online.hu
2006. Nov. 11., Szo, 09:27:47 CET


Miert nem hasznalsz JXTable-t?
Ingyenes, profin meg van csinalva stb.


Fábián Zoltán írta:
> Kösz, ezeket ezeket végignézem.
> Fabio
>
>
> --------
> Fábián Zoltán
> http://fz.szily.hu
> -----Original Message-----
> From: javalist-bounces at javagrund.hu [mailto:javalist-bounces at javagrund.hu]
> On Behalf Of istvan.ketler at lhsystems.com
> Sent: Friday, November 10, 2006 1:09 PM
> To: javalist at javagrund.hu
> Subject: Re: [Java lista]JTable adatainak beírása lassú-Tabla oszlopsorrend
> , szélessége, lementése és hasonlók
>
> Szia,
>
> a következő átgondolását javaslom Neked, mert nem pontosan értem, miért
> vesződsz olyasmivel, amit az API alapból tud. Vagy elnéztem valamit, és
> extra viselkedésre is szükséged lenne?
>
> A DefaultTableColumnModel teljesen jól kezeli ezeket a problémákat, a
> JTableHeader-ben pedig ha engedélyezed az áthelyezést, akkor megoldja azt
> Neked. A TableModel-nek nem kell tudnia arról, hogy egy adott oszlop éppen
> hányadikként jelenik meg, ő csak szépen adja oda azt az oszlopot, amit
> kérnek tőle. Majd a DefaultTableColumnModel megoldja azt, hogy a
> removeColumn-olt oszlopok ne legyenek láthatók, illetve elvégzi az oszlopok
> sorrendjének megváltoztatását is. Arról kell csak gondoskodnod, hogy
> addColumn után az újonnan hozzáadott oszlop, amely alaphelyzetben a végére
> kerül, visszakerüljön a helyére. Ehhez pedig a moveColumn metódust kell
> használnod. Kell még ezen kívül TableColumn referencia valamennyi oszlopra
> (a nem láthatókra is), hogy újra hozzá tudd adni őket a táblához, ha
> szükséges. Ez nem is baj, mert így rögtön megvan Neked a user által
> beállított legutóbbi szélessége is.
>
> Trick: a model index (getModelIndex) soha nem változik a TableColumn esetén.
> Ezt is használhatod a visszahelyezésekor. Használhatod továbbá a
> setIdentifier és getIdentifier metódusokat, amelyekben tárolsz valamilyen
> hivatkozást, aminek alapján vissza tudod majd tenni a helyére, ha szükséges.
> (pl. van egy listád, amiben a NEM LÁTHATÓ oszlopok is benne vannak, s ha a
> felhasználó áthelyez egy oszlopot, akkor a listát is frissíted mondjuk úgy,
> hogy a beszúrást közvetlenül az utolsó látható MÖGÉ végzed el).
>
> Trick: volt egy olyan bug, hogy a table.sizeColumnsToFit(-1) hívást ki
> kellett adni oszlop hozzáadása/törlése után. Nem tudom, hogy kell-e még,
> vagy kijavították már.
>
> Magyarán: a lekérdezésnél mindig elkérsz minden lehetéges oszlopot, és a
> ColumnModel fogja megoldani, hogy közülük csak az legyen látható, amelyiknek
> kell. A TableModel mindig az összes lehetséges oszlop odaadására fel van
> készülve.
>
> Remélem, nem értettem el, mit is akarsz valójában. Nem értem ugyanis, hogy
> miért kellene a küldött kódod. Max. arra lehet még szükség, ha a nulladik
> oszlop nem helyezhető át, akkor ez legyen meggátolva. Erre azt javaslom, ha
> nem baj az, hogy ez nem vesz részt a scrollozásban, hogy tedd őt zárolt
> oszloppá. Ekkor fizikailag egy másik tábla fogja kezelni, így csak a többi
> oszlop lesz áthelyezhető. (Az adatmodell viszont mindkét tábla mögött
> ugyanaz!)
>
> Üdvözlettel,
>
> Iván
>
>   
>> -----Original Message-----
>> From: javalist-bounces at javagrund.hu
>> [mailto:javalist-bounces at javagrund.hu] On Behalf Of Fábián Zoltán
>> Sent: Thursday, November 09, 2006 8:03 PM
>> To: javalist at javagrund.hu
>> Subject: Re: [Java lista]JTable adatainak beírása lassú-Tabla 
>> oszlopsorrend , szélessége, lementése és hasonlók
>>
>> 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();
>>         }
>> }
>>
>> _______________________________________________
>> Javalist mailing list
>> Javalist at javagrund.hu
>> http://javagrund.hu/mailman/listinfo/javalist
>>
>>     
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
>   



További információk a(z) Javalist levelezőlistáról