Voici un code permettant d'extraire sous forme de string la position des colonnes d'un JTable. Tres pratique donc pour ensuite sauvegarder cette position dans un .ini via les Properties :
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;
}
}
le principe est simple
un exemple
/** Sauve l'ordre actuel des colonnes la table **/
String saveOrder = TableColumnOrderManager.getTableOrder(maTable);
/** Modifier l'ordre **/
TableColumnOrderManager.setTableOrder("3,2,1,0",maTable)
/** Réinitialiser l'ordre par défaut **/
TableColumnOrderManager.restoreTableOrder(maTable);
/** Modifier l'ordre avec celui sauvegardé au début **/
TableColumnOrderManager.setTableOrder(saveOrder,maTable)
on peut meme étendre ce principe sur la taille des colonnes aussi simplement.
|