六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 78|回复: 0

Jtable冻结

[复制链接]

升级  86%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
43
 楼主| 发表于 2013-1-19 04:15:26 | 显示全部楼层 |阅读模式
網上看到的凍結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[col];
  • }

  • publicObjectgetValueAt(introw,intcol){
  • returndata[row][col];
  • }
  • };
  • 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[col+1];
  • }<li class="alt">
  • publicObjectgetValueAt(introw,intcol){
  • returndata[row][col+1];
  • }<li class="alt">
  • publicvoidsetValueAt(Objectobj,introw,intcol){
  • data[row][col+1]=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);
  • }
  • }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表