hongyong 发表于 2013-1-26 16:39:59

Jtable冻结

網上看到的凍結Table列的代碼,是通過兩個Table來實現。現有一個第三方控件包jsuit,有jpvTableView控件,可以實現凍結的功能,但是沒有凍結表頭。
 
<div class="highlighter">
[*]importjava.awt.BorderLayout;
[*]importjava.awt.event.WindowAdapter;
[*]importjava.awt.event.WindowEvent;<li class="alt">
[*]importjavax.swing.*;
[*]importjavax.swing.event.ListSelectionEvent;
[*]importjavax.swing.event.ListSelectionListener;
[*]importjavax.swing.table.AbstractTableModel;
[*]
[*]publicclassJtableTestextendsJFrame{
[*]privatestaticfinallongserialVersionUID=1L;<li class="alt">
[*]Object[][]data;<li class="alt">
[*]Object[]column;<li class="alt">
[*]JTablefixedTable,table;<li class="alt">
[*]publicJtableTest(){
[*]super("FixedColumnExample");
[*]setSize(400,150);<li class="alt">
[*]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"};<li class="alt">
[*]AbstractTableModelfixedModel=newAbstractTableModel(){
[*]privatestaticfinallongserialVersionUID=1L;
[*]
[*]publicintgetColumnCount(){
[*]return1;
[*]}
[*]
[*]publicintgetRowCount(){
[*]returndata.length;
[*]}
[*]
[*]publicStringgetColumnName(intcol){
[*]return(String)column;
[*]}
[*]
[*]publicObjectgetValueAt(introw,intcol){
[*]returndata;
[*]}
[*]};
[*]AbstractTableModelmodel=newAbstractTableModel(){
[*]privatestaticfinallongserialVersionUID=1L;<li class="alt">
[*]publicintgetColumnCount(){
[*]returncolumn.length-2;
[*]}<li class="alt">
[*]publicintgetRowCount(){
[*]returndata.length;
[*]}<li class="alt">
[*]publicStringgetColumnName(intcol){
[*]return(String)column;
[*]}<li class="alt">
[*]publicObjectgetValueAt(introw,intcol){
[*]returndata;
[*]}<li class="alt">
[*]publicvoidsetValueAt(Objectobj,introw,intcol){
[*]data=obj;
[*]}<li class="alt">
[*]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);
[*]
[*]}
[*]});<li class="alt">
[*]table=newJTable(model);
[*]table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
[*]table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
[*]table.getSelectionModel().addListSelectionListener(
[*]newListSelectionListener(){
[*]publicvoidvalueChanged(ListSelectionEventarg0){
[*]checkSelection(false);
[*]}
[*]});<li class="alt">
[*]JViewportviewport=newJViewport();
[*]viewport.setView(fixedTable);
[*]viewport.setPreferredSize(fixedTable.getPreferredSize());<li class="alt">
[*]JScrollPanescroll=newJScrollPane(table);
[*]scroll.setRowHeaderView(viewport);
[*]scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable
[*].getTableHeader());
[*]
[*]getContentPane().add(scroll,BorderLayout.CENTER);
[*]}<li class="alt">
[*]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);
[*]}
[*]}
页: [1]
查看完整版本: Jtable冻结