让JTable能隐藏列 冻结列  还有现实不规则表 求大家有什么办法 或者一些相关的源码

解决方案 »

  1.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;public class FixedColumnExample extends JFrame {
      Object[][] data;
      Object[] column;
      JTable fixedTable,table;  public FixedColumnExample() {
        super( "Fixed Column Example" );
        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);
        
        JScrollPane scroll = new JScrollPane( table );
        JViewport viewport = new JViewport();
        viewport.setView(fixedTable);
        viewport.setPreferredSize(fixedTable.getPreferredSize());
        scroll.setRowHeaderView(viewport);
        scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable.getTableHeader());
        
        getContentPane().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);
          }
        }
      }  public static void main(String[] args) {
        FixedColumnExample frame = new FixedColumnExample();
        frame.addWindowListener( new WindowAdapter() {
          public void windowClosing( WindowEvent e ) {
    System.exit(0);
          }
        });
        frame.setVisible(true);
      }
    }