| 12
 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);
 
 
	}
 
 
} |