/*****> Class : JTableFixedColumn * **> Auteur : Johann Heymes * **> Creation : 04 juin 2002 * * **> Licence : * Ce programme est un logiciel gratuit , il peut être modifié et / ou * distribué en accord avec les termes de la licence 'GNU General Public * Licence' tel qu'elle est publiée par la 'Free Software Foundation . * (version 2 ou précédante). * Ce programme est distribué dans l'espoir qu'il pourra être utile , * mais SANS AUCUNE GARANTIE . Voir la 'GNU General Public License' pour * plus de détail. * Vous devriez avoir reçu une copie de la 'GNU General Public License' * avec la distribution de ce programme, si non, vous pouvez écrire à la * 'Free Software Foudation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA'. * ou a http://www.gnu.org/licenses/gpl.html * **> Description : * Cette classe redefini certaine caracterisique de l'aspect visuel d'une JTable * ce source a ete inspire de l'exemple trouve a l'adresse http://www2.gol.com/users/tame/ * ***/ import javax.swing.*; import javax.swing.event.*; import javax.swing.event.TableModelListener; import javax.swing.event.TableModelEvent; import javax.swing.table.*; import java.awt.Dimension; import java.io.*; import java.awt.*; import java.awt.image.*; import java.util.*; //import org.jdesktop.swingx.JXTable; //import org.jdesktop.swingx.table.TableColumnExt; public class JTableFixedColumn extends JScrollPane { protected JTableNotifySelection tableFix; protected JTableNotifySelection table; public FixedTableModelSuite modelJTable; public FixedTableModel modelJTableFix; private TableColumnModel TCM; TableModel DTM; protected int nbColonneFixe; public Object [][] data; public String [] columnNames; private boolean[][] Edit=null; private int NbLigne,NbCol; public boolean emptyTab; private Color mycolor; private String NewNameCol=" "; public JTableFixedColumn (Object[][] data, String[] columnNames, int nbColonneFixe,boolean emptyTab) { super (); this.nbColonneFixe = nbColonneFixe; this.data = data; this.columnNames = columnNames; mycolor = new Color(232, 232, 232); this.modelJTable=new FixedTableModelSuite (this); this.table = new JTableNotifySelection (modelJTable, this); this.table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF); this.table.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); this.table.getTableHeader().setReorderingAllowed(false); this.table.setSelectionBackground(Color.cyan); this.table.setSelectionForeground(Color.black); this.table.setDefaultRenderer(Object.class,new CustomTable()); this.table.setRowSelectionAllowed(emptyTab); this.table.setColumnSelectionAllowed(emptyTab); // this.table.getModel().addTableModelListener(this); this.modelJTableFix=new FixedTableModel (this); this.tableFix = new JTableNotifySelection (modelJTableFix, this); this.tableFix.setAutoResizeMode (JTable.AUTO_RESIZE_OFF); this.tableFix.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); this.tableFix.getTableHeader().setReorderingAllowed(false); this.tableFix.setSelectionBackground(Color.cyan); this.tableFix.setSelectionForeground(Color.black); this.tableFix.setDefaultRenderer(Object.class,new CustomTable()); this.tableFix.setRowSelectionAllowed(emptyTab); this.tableFix.setColumnSelectionAllowed(emptyTab); this.NbLigne=table.getRowCount(); this.NbCol=table.getColumnCount(); this.setViewportView (this.table); JViewport view = new JViewport (); view.setView (this.tableFix); view.setPreferredSize (this.tableFix.getPreferredSize ()); this.setRowHeader (view); this.setCorner (super.UPPER_LEFT_CORNER, this.tableFix.getTableHeader ()); this.TCM=table.getColumnModel(); System.out.println("a l'init il y a "+(columnNames.length- nbColonneFixe)+" + "+ nbColonneFixe+" colonnes fixes\n"); TCM.addColumnModelListener(new TableColumnModelListener() { public void columnAdded(TableColumnModelEvent e) { System.out.println("une colonne a ete ajoutee"); System.out.println("Avant NbCol = "+getNbCol()); System.out.println("le nombre de colonne est maintenant de "+TCM.getColumnCount()+" \n"); //getTableModel().initCol(); NbCol++; System.out.println("Apres NbCol = "+getNbCol()); } public void columnSelectionChanged(ListSelectionEvent e) {} public void columnMoved(TableColumnModelEvent e) {} public void columnMarginChanged(ChangeEvent e) {} public void columnRemoved(TableColumnModelEvent e) { System.out.println("une colonne a ete enlevee"); NbCol-- ; } }); initEdit(); } protected void fireSelectionChanged (JTableNotifySelection selectedTable) { int index1 = this.table.getSelectedRow (); int index2 = this.tableFix.getSelectedRow (); int selectedIndex = selectedTable.getSelectedRow (); if ( index1 != index2) { if ( selectedTable != this.table ) { this.table.setRowSelectionInterval (selectedIndex,selectedIndex); } else { this.tableFix.setRowSelectionInterval (selectedIndex,selectedIndex); } } } public int getNbCol() { return NbCol; } public Object[][] getData() { return this.data; } public JTableNotifySelection getTable() { return this.table; } public FixedTableModelSuite getTableModel() { return modelJTable ; } public void addColumn(TableColumn aColumn,String a) { NewNameCol=a; int modelColumn = aColumn.getModelIndex(); TableColumnModel newTCM=table.getColumnModel(); newTCM.addColumn(aColumn); table.setColumnModel(newTCM); } class CustomTable extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,boolean hasFocus,int row,int column) { setBackground((row%2==0)? mycolor:Color.WHITE); setHorizontalAlignment(JLabel.CENTER); return super.getTableCellRendererComponent(table,value, isSelected,hasFocus,row,column); } } public void initEdit() { Edit = new boolean[NbLigne][NbCol]; for (int i=0;i