Jtable - divers cellrenderer (time, date, boolean, string, enum, integer, float, etc.)

Soyez le premier à donner votre avis sur cette source.

Vue 18 926 fois - Téléchargée 2 717 fois

Description

Etant en train de développer un PropertyTable (JTable avec 2 colonnes : 1 "propriété", l'autre "Valeur") dans le style de celle de NetBeans, j'ai dû faire plusieurs cellRenderer.

Ceux-ci sont encore en cours de développement, et j'aimerai votre avis sur ceux-ci : auriez-vous des idées d'évolutions ? Les trouvez-vous suffisament pratiques à utiliser ? Des remarques sur le code ?

Pour le CDateRenderer, je me base sur une librairie externe : celle de microba, que j'ai jointe au zip.

Source / Exemple :


// Voici par exemple le code du FileNameRenderer et FileEditor :

package composants.CustomTable;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellRenderer;

public class CFileNameRenderer implements TableCellRenderer {

	private static final long serialVersionUID = 1L;
	JTextField m_txtText;
	JPanel m_panControl;
	
	public CFileNameRenderer() {
		super();
		JButton m_btnFileName = new JButton("...");
		m_panControl = new JPanel(new BorderLayout());
		m_txtText = new JTextField();
		m_txtText.setEditable(false);
		m_txtText.setBackground(Color.WHITE);
		m_panControl.add(m_txtText, BorderLayout.CENTER);
		m_panControl.add(m_btnFileName, BorderLayout.EAST);
	}

	public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
		m_txtText.setText((String) arg1);
		return m_panControl;
	}

}

package composants.CustomTable;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellEditor;

import affiche.CPictureFileFilter;

public class CFileNameEditor extends AbstractCellEditor implements TableCellEditor {

	private static final long serialVersionUID = 1L;

	private JPanel m_panControl;
	private JTextField m_txtFileName;
	private int m_iCol;
	private int m_iRow;
	private JTable m_oTable; 
	
	public CFileNameEditor() {
		JButton m_btnFileName = new JButton("...");
		m_panControl = new JPanel(new BorderLayout());
		m_txtFileName = new JTextField();
		m_txtFileName.setEditable(false);
		m_txtFileName.setBackground(Color.WHITE);
		m_panControl.add(m_txtFileName, BorderLayout.CENTER);
		m_panControl.add(m_btnFileName, BorderLayout.EAST);
		
		m_btnFileName.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new Thread(new Runnable() {
            		public void run() {
            			SwingUtilities.invokeLater(new Runnable() {
            				public void run() {
            					JFileChooser oFile = new JFileChooser();
            					oFile.setApproveButtonText("Ouvrir");
            					oFile.setMultiSelectionEnabled(false);
            					oFile.setDialogTitle("Sélectionnez le nom du fichier d'image.");
            					oFile.setFileFilter(new CPictureFileFilter());
            					int iFileName = oFile.showDialog(m_txtFileName, "Ouvrir");
            					if (iFileName == JFileChooser.APPROVE_OPTION) {
            						String sFileName = oFile.getSelectedFile().getPath();
            						m_txtFileName.setText(sFileName);
            						m_oTable.getModel().setValueAt(m_txtFileName, m_iRow, m_iCol);
            					}
            				}
            			});
            		}
            	}).start();
			}
		});
	}
	
	public Component getTableCellEditorComponent(JTable oTable, Object oFileName, boolean arg2, int arg3, int arg4) {
		m_txtFileName.setText((String) oFileName);
		m_iRow = arg3;
		m_iCol = arg4;
		m_oTable = oTable;
		return m_panControl;
	}
	
	public Object getCellEditorValue() {
		return m_txtFileName.getText();
	}
}

Conclusion :


Cette source sera mise à jour en prenant compte vos idées d'évolutions, et je posterais aussi mon PropertyTable une fois que je l'aurais fini.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
22 septembre 2010

Salut, je développe une table exactement comme ce que tu as fait et c'est un plaisir de tomber sur cette collection toute prête à l'emploi.
:D
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
zarda : regarde le EnumRenderer/EnumEditor de ma source, ces deux classes permettent justement d'utiliser un combo pour l'affichage et la modification de valeurs !
Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
96
Salut,

Afin d'obtenir une aide concrete à ton prob merci de poster dans le forum et non sur une source!
Messages postés
1
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
2 octobre 2006

salut
je voudrais dabord te remercier pour cette initiative, en effet bcp de devloppeurs rencontre des difficultés dans ces cell render et editor, j'en suis un
en faite j'ai analyser ton projet et je ne trouve toujours pas une soluce a mon pb
j'ai deja fait un ultra grand tour dans les sites et les forums avant de venir poser mon pb ici
es il possible d'inclur un combo box dans une jtable tout en gardant le combo toujours affiché en tant que comboBox dans la table et non en tant que texte , et en utilisant autre solution que celle qui utilise un String[][] pour ajouter les objets dans le combo parcque notre combo es mis a jour au fur et a mesure et meme le choix des combo peuvent intervenir dans les cases de la JTable (ajout ou supression de ligne)

je serais tres reconnaissant a celui qui m'aidera dans ce petit soucis, et je suis pret a vous fournir mes differents codes etudiés et implémentés et qui n'ont abouti a aucun resultat

merci
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
99
Oui en effet, la classe CFileFilter n'est pas incluses dans ce zip, c'est un oubli, va falloir que je le mettre à jour.

Comme je l'ai dit dans la description de la source, ces CellEditor/CellRenderer ont été développés pour une PropertyTable que je mettrais sur le site dès que je l'aurais fini, donc un peu de patience est je posterai ma JTable, TableModel et tout les Filtres de fichiers utilisés.
Afficher les 10 commentaires

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.