網上看到的凍結Table列的代碼,是通過兩個Table來實現。現有一個第三方控件包jsuit,有jpvTableView控件,可以實現凍結的功能,但是沒有凍結表頭。
- importjava.awt.BorderLayout;
- importjava.awt.event.WindowAdapter;
- importjava.awt.event.WindowEvent;
- importjavax.swing.*;
- importjavax.swing.event.ListSelectionEvent;
- importjavax.swing.event.ListSelectionListener;
- importjavax.swing.table.AbstractTableModel;
- publicclassJtableTestextendsJFrame{
- privatestaticfinallongserialVersionUID=1L;
- Object[][]data;
- Object[]column;
- JTablefixedTable,table;
- publicJtableTest(){
- super("FixedColumnExample");
- setSize(400,150);
- data=newObject[][]{{"1","11","A","","","","",""},
- {"2","22","","B","","","",""},
- {"3","33","","","C","","",""},
- {"4","44","","","","D","",""},
- {"5","55","","","","","E",""},
- {"6","66","","","","","","F"}};
- column=newObject[]{"fixed1","o","a","b","c","d","e","f"};
- AbstractTableModelfixedModel=newAbstractTableModel(){
- privatestaticfinallongserialVersionUID=1L;
- publicintgetColumnCount(){
- return1;
- }
- publicintgetRowCount(){
- returndata.length;
- }
- publicStringgetColumnName(intcol){
- return(String)column[col];
- }
- publicObjectgetValueAt(introw,intcol){
- returndata[row][col];
- }
- };
- AbstractTableModelmodel=newAbstractTableModel(){
- privatestaticfinallongserialVersionUID=1L;
- publicintgetColumnCount(){
- returncolumn.length-2;
- }
- publicintgetRowCount(){
- returndata.length;
- }
- publicStringgetColumnName(intcol){
- return(String)column[col+1];
- }
- publicObjectgetValueAt(introw,intcol){
- returndata[row][col+1];
- }
- publicvoidsetValueAt(Objectobj,introw,intcol){
- data[row][col+1]=obj;
- }
- publicbooleanCellEditable(introw,intcol){
- returntrue;
- }
- };
- fixedTable=newJTable(fixedModel);
- fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
- fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- fixedTable.getSelectionModel().addListSelectionListener(
- newListSelectionListener(){
- publicvoidvalueChanged(ListSelectionEventarg0){
- checkSelection(true);
- }
- });
- table=newJTable(model);
- table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- table.getSelectionModel().addListSelectionListener(
- newListSelectionListener(){
- publicvoidvalueChanged(ListSelectionEventarg0){
- checkSelection(false);
- }
- });
- JViewportviewport=newJViewport();
- viewport.setView(fixedTable);
- viewport.setPreferredSize(fixedTable.getPreferredSize());
- JScrollPanescroll=newJScrollPane(table);
- scroll.setRowHeaderView(viewport);
- scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable
- .getTableHeader());
- getContentPane().add(scroll,BorderLayout.CENTER);
- }
- privatevoidcheckSelection(booleanisFixedTable){
- intfixedSelectedIndex=fixedTable.getSelectedRow();
- intselectedIndex=table.getSelectedRow();
- if(fixedSelectedIndex!=selectedIndex){
- if(isFixedTable){
- table.setRowSelectionInterval(fixedSelectedIndex,
- fixedSelectedIndex);
- }else{
- fixedTable
- .setRowSelectionInterval(selectedIndex,selectedIndex);
- }
- }
- }
- publicstaticvoidmain(String[]args){
- JtableTestframe=newJtableTest();
- frame.addWindowListener(newWindowAdapter(){
- publicvoidwindowClosing(WindowEvente){
- System.exit(0);
- }
- });
- frame.setVisible(true);
- }
- }