
Sources JavaConsultez toutes les sources
Nombre d'auteurs : 29, nombre de sources : 134, création le 13 avril 2013
Sommaire→Interfaces graphiques→Tableaux et arbresLa classe JTableFixedColumn est une extension de JScrollPane. Elle permet de visualiser une JTable dont un certain nombre de colonnes sont fixes par rapport à la vue.
Cette classe change la couleur des cellules choisies du rouge vers le bleu et inversement
Cette classe permet de colorer chaque colonne d'une JTable
Cette classe simple montre comment insérer une JProgressBar dans une JTable
Cet exemple permet de visualiser une arborescence de fichiers grâce à un JTree. Celui ci affiche tous les fichiers et répertoires d'une racine donnée (répertoire). L'application utilise notamment les noms et icones système des fichiers.
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.
Ce code montre comment on peux personaliser le popup d'une JComboBox
Pour commencer, il faut savoir que c'est le composant UI associer au JComboBox qui se charge d'afficher le popup. Je vais donc commencer par sa création.
Ensuite pour une cohérence d'affichage entre le popup et la zone du JCombox, redéfinir un ListCellRenderer.
Le composant UI représenté par la classe ComboTreeUI :
En fait on va juste lui dire d'uiliser un autre Popup que celui habituel
Ensuite il faute créer le popup représenté par la classe ComboTreePopup
En fait on fait deux choses, on lui dit d'utiliser une liste dont le model est un peu spécial et va suivre et on redéfinit le comportement de la souris.
Le model de la liste est représente par la classe ModelListTree
Il reste plus qu'a créer le renderer et le JComboTree.
Le Renderer est représenté par la classe RenduComboTree
Le JComboTree est représenté par la classe JComboTree
Pour que l'affichage ressemble à un arbre j'utilises un layout personnel représenté par la classe EcartLayout
C'est une table, dont on peut choisir la taille des cellules par rapport aux autres, les redimenssionées, les déplacées, mettre des entête ou on veut, et plein de trucs sympas comme ça Wink
Pour récupérer, il s'aggit de quatre classes, plus une pour un exemple (il casse pas de briques, mais c'est pour montrer une partie du potentiel)
La classe TableSouple elle même, du package developpez.swing est à récupérée à :
TableSouple
Le modèle de la table, du package developpez.swing.model, est à récupéré à :
ModelTableSouple
L'interface pour faire des écouteurs des événements survenants sur la table, dans le package developpez.swing.listener :
TableSoupleListener
La classe décrivant les événements dans le package developpez.swing.event :
TableSoupleEvent
Voila pour les classes nécéssaire au fonctionnement de la table.
En prime un petit exemple dans le package developpez.tests :
TestTableSouple



