1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
   | package hotelbb.communs.framework.ihm;
 
import java.awt.BorderLayout;
import java.awt.Graphics;
 
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.AbstractTableModel;
 
public class JTableFixedColumn extends JComponent {
 
	Object[][] data;
	Object[] column;
	JTable fixedTable,table;
	JScrollPane scroll;
    JViewport viewport;
 
	public JTableFixedColumn() {
	    super( );
	    //setSize( 400, 150 );
 
	    data =  new Object[][]{
	        {"1","11","A","","","","",""},
	        {"2","22","","B","","","",""},
	        {"3","33","","","C","","",""},
	        {"4","44","","","","D","",""},
	        {"5","55","","","","","E",""},
	        {"6","66","","","","","","F"}};
	    column = new Object[]{"fixed 1","fixed 2","a","b","c","d","e","f"};
 
	    AbstractTableModel fixedModel = new AbstractTableModel() {
	      public int getColumnCount() { return 2; }
	      public int getRowCount() { return data.length; }
	      public String getColumnName(int col) {
	       return (String)column[col]; 
	      }
	      public Object getValueAt(int row, int col) { 
	        return data[row][col]; 
	      }
	    };
	    AbstractTableModel    model = new AbstractTableModel() {
	      public int getColumnCount() { return column.length -2; }
	      public int getRowCount() { return data.length; }
	      public String getColumnName(int col) {
	       return (String)column[col +2]; 
	      }
	      public Object getValueAt(int row, int col) { 
	        return data[row][col+2]; 
	      }
	      public void setValueAt(Object obj, int row, int col) { 
	        data[row][col +2] = obj; 
	      }
	      public boolean CellEditable(int row, int col) { 
	        return true; 
	      }
	    };
 
	    fixedTable = new JTable( fixedModel ) {
	      public void valueChanged(ListSelectionEvent e) {
	        super.valueChanged(e);
	        checkSelection(true); 
	      }
	    };
	    table = new JTable( model ) {
	      public void valueChanged(ListSelectionEvent e) {
	        super.valueChanged(e);
	        checkSelection(false); 
	      }
	    };
	    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
	    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
	    fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
	    scroll = new JScrollPane( table );
	    viewport = new JViewport();
	    viewport.setView(fixedTable);
	    viewport.setPreferredSize(fixedTable.getPreferredSize());
	    scroll.setRowHeaderView(viewport);
	    scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable.getTableHeader());
 
	    add(scroll,BorderLayout.CENTER);
	  }
 
	  private void checkSelection(boolean isFixedTable) {
	    int fixedSelectedIndex = fixedTable.getSelectedRow();
	    int      selectedIndex = table.getSelectedRow();
	    if (fixedSelectedIndex != selectedIndex) {
	      if (isFixedTable) {
	        table.setRowSelectionInterval(fixedSelectedIndex,fixedSelectedIndex);
	      } else {
	        fixedTable.setRowSelectionInterval(selectedIndex,selectedIndex);
	      }
	    }
	  }
 
	protected void paintComponent(Graphics arg0) {
 
		viewport.paintComponents(arg0);
		scroll.paintComponents(arg0);
		super.paintComponent(arg0);
 
 
	}
 
 
} | 
Partager