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

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

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.