Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

HEADER POUR LES LIGNES D'UNE JTABLE


Information sur la source

Catégorie :Api Classé sous : header, entête, ligne, jtable Niveau : Débutant Date de création : 19/12/2005 Vu / téléchargé: 10 617 / 1 103

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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;
  • }
  • }
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.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de soufianos le 10/04/2007 09:44:03

Bonjour, j'ai téléchargé le zip mais j'ai pas su l'éxecuter sur java Eclipse.Est ce que vous pouvez aider?
merci
  

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Taille du header d'un JTable [ par hades5 ] Salut, Quelqu'un saurait comment d&#233;terminer la taille de l'ent&#234;te d'un tableau. La m&#233;thode qui permet de d&#233;terminer la taille de JTable : avoir plusieurs cellules par ligne pour une colonne [ par kobee12 ] Bonjour &#224; tous,j'ai fait un tableau avec des en-t&#234;tes et tout s'affiche correctement.Seulement j'aimerais savoir s'il est possible d'avoir p cacher le header d'un jtable [ par kwak300 ] bonjour je souhaiterai ne pas affiche les entete de colone de mon jtable et je voudrai aussi savoir si dans une cellule il est possible d'afficher une Jtable ecrire sur plusieur ligne dans une cellule? [ par kwak300 ] je voudrai que'une string avec un \n&nbsp; fasse un retour chariot et pas que ca me bourre tt sur la meme ligne comment faire?? &nbsp; JTable mettre le column header autre par [ par kwak300 ] pour a tous je voudrai savoir si ont peut mettre le column header dans un autre composant en gros je voudrai mettre mon jtable dans un panel et les e JTable : 2 colonnes avec 1 entête ! [ par joebar3333 ] Salut,j'aimerai obtenir une jtable avec 2 colonnes ayant une ent&#234;te commune. Si quelqu'un a une soluc', qu'il me l'explique pleaz parce que la c' JTable : 2 colonnes avec entête commune [ par joebar3333 ] Salut,D&#233;sol&#233; de reposter ce sujet mais je m'&#233;tais tromp&#233; dans le th&#232;me (j'avais s&#233;lectionn&#233; API et non Au secours). [Java][JTable] Changer le contenu d'une seule cellule [ par terminagroo ] Bonjour,Voil&#224; j'ai une Jtable dans laquelle j'ai des combobox (pleins de combobox!!!).Le probl&#232;me est que sur chaque ligne le contenu de ma selection automatique d'une ligne dans un jTable [ par Keitaro_Senpai ] bonjour !voila je recupere dans 3 jTable differentes le contenu de 3 tables SQL.je souhaiterai en selectionnant une ligne d'une jTable que la ligne co Saut de ligne dans la cellule d'une Jtable [ par nander ] Bonjour a tous .je voulais savoir si il etait possible de faire un saut de ligne a l'interieur d'une cellule de JTable afin d'afficher les donn&#233;e


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,482 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.