1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
package xxxx.util.swing;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
/**
* Permet de récuperer/positionner l'ordre des colonnes d'une table
* @author divxdede
*/
public class TableColumnOrderManager
{
/** Récupere l'ordre des colonnes sous la forme "2,0,1"
* Donne l'ordre courant par rapport à l'ordre d'origine de la TableModel
* @return Ordre courant des colonnes (ex: "2,0,1")
**/
public static String getTableOrder(JTable table)
{ String Result = "";
int nbrColumns = table.getColumnCount();
for(int i = 0 ; i < nbrColumns ; i++)
{ int realColumn = table.getColumnModel().getColumn(i).getModelIndex();
Result += realColumn;
if(i < nbrColumns - 1) Result +=",";
}
return Result;
}
/** Réordonne les colonnes d'une table
* IMPORTANT les numero dans "2,0,1" se refere à la position d'origine du TableModel
* @param order Ordre souhaité par rapport à l'origine
* @param table La JTable à réordonner
**/
public static void setTableOrder(String order,JTable table)
{
ArrayList expected = makeOrderList(order);
ArrayList having = makeOrderList( getTableOrder(table) );
for(int i = 0 ; i < table.getColumnCount() ; i++)
{
Integer valExpected = (Integer)expected.get(i);
Integer valHaving = (Integer)having.get(0);
if( valExpected.intValue() == valHaving.intValue() )
{ having.remove(0);
continue;
}
int posExpectedOnCurrent = having.indexOf(valExpected);
System.out.println("Move column " + (posExpectedOnCurrent + i) + " to " + i);
having.remove(posExpectedOnCurrent);
table.moveColumn( posExpectedOnCurrent + i , i );
}
}
/** Restaure les colonnes à leur position d'origine
* @param table JTable dont ont veux restaurer la position des colonnes
**/
public static void restoreTableOrder(JTable table)
{ String strOrder = "";
for(int i = 0 ; i < table.getColumnCount() ; i++)
{ strOrder += i;
if(i < table.getColumnCount() -1 ) strOrder += ",";
}
setTableOrder(strOrder,table);
}
/** Méthode interne pour générer une liste d'ordre **/
private static ArrayList makeOrderList(String strList)
{ ArrayList result = new ArrayList();
StringTokenizer tokenizer = new StringTokenizer(strList, ",");
while(tokenizer.hasMoreTokens())
{ String token = tokenizer.nextToken();
Integer value = new Integer( Integer.parseInt(token) );
result.add(value);
}
return result;
}
} |
Partager