Header pour les lignes d'une jtable

Description

Le but de code était, tout comme Excel ou openoffice, d'afficher pour chacune des lignes d'une grille une entête (header). Ici, il faut utiliser conjointement un MyScrollTable.java (qui utilise par défaut un MyTableRowHeaderRenderer.java) avec un MyTable.java.

Vous pourrez voir comment ça marche en utilisant la classe Langue.java

Voilà

Source / Exemple :


package projet.table;

/**

  • <p>Titre : MyScrollTable</p>
  • <p>Description : Classe permettant d'avoir une MyTable avec des ascenseurs</p>
  • @version 1.0
  • /
//Importation des packages nécessaires import javax.swing.AbstractListModel; import javax.swing.JList; import javax.swing.JScrollPane; public class MyScrollTable extends JScrollPane { //Variables globales private boolean rowHeader; private AbstractListModel model; /**Constructeur
  • @param table La table*/
public MyScrollTable(MyTable table) { super(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); rowHeader = false; } /**Constructeur
  • @param table La table
  • @param rowHeader Affichage d'un header pour les lignes*/
public MyScrollTable(MyTable table, boolean rowHeader) { super(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); this.rowHeader = rowHeader; defineRowHeader(table); } /**Constructeur
  • @param table La table
  • @param rowHeader Affichage d'un header pour les lignes
  • @param lm AbstractListModel à utiliser*/
public MyScrollTable(MyTable table, boolean rowHeader, AbstractListModel lm) { super(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); this.rowHeader = rowHeader; model = lm; defineRowHeader(table); } /**Méthode définissant si nécessaire les entêtes de lignes
  • @param table Sur quelle table*/
public void defineRowHeader(MyTable table) { if(rowHeader){ AbstractListModel lm = null; if(model ==null){ lm = new MyTableListModel(table); } else{ lm = model; } JList list = new JList(lm); list.setFixedCellWidth(50); list.setFixedCellHeight(table.getRowHeight()); list.setCellRenderer(new MyTableRowHeaderRenderer(table)); list.setBackground(table.getTableHeader().getBackground()); this.setRowHeaderView(list); } else{ this.setRowHeaderView(null); } table.setMyScrollTable(this); } /**Méthode permettant de savoir si on affiche les entêtes de lignes
  • @return Gestion des entêtes de lignes ?*/
public boolean isRowHeader() { return rowHeader; } /**Méthode indiquant si on gére les entêtes de lignes*/ public void setRowHeader(boolean rowHeader) { this.rowHeader = rowHeader; } } package projet.table; /**
  • <p>Titre : MyTableRowHeaderRenderer</p>
  • <p>Description : Classe permettant d'avoir une entête pour les lignes</p>
  • @version 1.0
  • /
//Importation des packages nécessaires import java.awt.Component; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.UIManager; import javax.swing.table.JTableHeader; public class MyTableRowHeaderRenderer extends JLabel implements ListCellRenderer { /**Constructeur
  • @param table Sur quelle table*/
public MyTableRowHeaderRenderer(JTable table) { JTableHeader header = table.getTableHeader(); setOpaque(true); setBorder(UIManager.getBorder("TableHeader.cellBorder")); setHorizontalAlignment(CENTER); setForeground(header.getForeground()); setBackground(header.getBackground()); setFont(header.getFont()); } /**Méthode permettant d'avoir la list renderer d'une ligne
  • @param list Liste
  • @param value Valeur
  • @param index Index de ligne
  • @param isSelected Savoir si la ligne est sélectionnée
  • @param cellHasFocus Savoir si la cellule a le focus*/
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setText("" + (index + 1)); return this; } }

Conclusion :


Il y a certainement des bugs. Si oui, n'hésitez pas à me les communiquer.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.