带JCheckBox的JTable的例子

public   class  StaffTableCheckBoxRenderer  extends  JCheckBox  implements  TableCellRenderer {

    
public  StaffTableCheckBoxRenderer() {
        setHorizontalAlignment(JCheckBox.CENTER);
    }

    
public  Component getTableCellRendererComponent(JTable table, Object value,
            
boolean  isSelected,  boolean  hasFocus,  int  row,  int  column) {
        setSelected((Boolean)value);
        
return   this ;
    }
}

 

public   class  StaffTableCheckBoxHeaderRenderer  extends  JCheckBox  implements  TableCellRenderer, MouseListener {

    
protected   int  column;
    
protected   boolean  mousePressed  =   false ;

    
public  StaffTableCheckBoxHeaderRenderer(ItemListener itemListener) {
        addItemListener(itemListener);
        setHorizontalAlignment(JCheckBox.CENTER);
    }

    
public  Component getTableCellRendererComponent(JTable table, Object value,  boolean  isSelected,  boolean  hasFocus,  int  row,  int  column) {
        JTableHeader header 
=  table.getTableHeader();
        setForeground(header.getForeground());
        setBackground(header.getBackground());
        setFont(header.getFont());
        header.addMouseListener(
this );
        setColumn(column);
        setBorder(UIManager.getBorder(
" TableHeader.cellBorder " ));
        
return   this ;
    }

    
protected   void  setColumn( int  column) {
        
this .column  =  column;
    }

    
public   int  getColumn() {
        
return  column;
    }

    
protected   void  handleClickEvent(MouseEvent e) {
        
if  (mousePressed) {
            mousePressed 
=   false ;
            JTableHeader header 
=  (JTableHeader) (e.getSource());
            JTable tableView 
=  header.getTable();
            TableColumnModel columnModel 
=  tableView.getColumnModel();
            
int  viewColumn  =  columnModel.getColumnIndexAtX(e.getX());
            
int  column  =  tableView.convertColumnIndexToModel(viewColumn);
            
if  (viewColumn  ==   this .column  &&  e.getClickCount()  ==   1   &&  column  !=   - 1 ) {
                doClick();
            }
        }
    }

    
public   void  mouseClicked(MouseEvent e) {
        handleClickEvent(e);
        ((JTableHeader) e.getSource()).repaint();
    }

    
public   void  mousePressed(MouseEvent e) {
        mousePressed 
=   true ;
    }

    
public   void  mouseReleased(MouseEvent e) {
    }

    
public   void  mouseEntered(MouseEvent e) {
    }

    
public   void  mouseExited(MouseEvent e) {
    }
}

 

public   class  StaffTableModel  extends  DefaultTableModel {

    
private   static   final   long  serialVersionUID  =   5950528258243655615L ;
    
private   static   final  String[] columnNames  =   new  String[] {  " 用户名 " " 姓名 " ,
        
" 所属咨询区 " " 角色 " " 状态 " " 选择 "  };
    
private   static   final  Class[] columnClasses  =   new  Class[] { String. class ,
        String.
class , String. class , String. class , String. class , Boolean. class  };
    
private   static  StaffQueryService staffService;
    
private   boolean [] selections;

    
public   void  setStaffs(List < Staff >  staffs) {
          
for  (Staff s : staffs) {
              
this .getDataVector().add(s);
          }
          
this .generateSelections();
    }

    @Override
    
public   int  getColumnCount() {
        
return   6 ;
    }

    @Override
    
public  String getColumnName( int  column) {
        
return  columnNames[column];
    }

    @Override
    
public  Class <?>  getColumnClass( int  columnIndex) {
        
return  columnClasses[columnIndex];
    }

    @Override
    
public  Object getValueAt( int  row,  int  column) {
        Staff staff 
=  (Staff)  this .getDataVector().get(row);

        
switch  (column) {
            
case   0 :
                
return  staff.getId();
            
case   1 :
                
return  staff.getName();
            
case   2 :
                
return  staff.getBelongTo();
            
case   3 :
                
return  staff.getType();
            
case   4 :
                
switch  (staff.getState()) {
                    
case  ENABLED:
                        
return   " 已启用 " ;
                    
case  DISABLED:
                        
return   " 已停用 " ;
                    
default :
                        
return  staff.getState().toString();
                }
            
case   5 :
                
return   this .selections[row];
            
default :
                
return   "" ;
        }
    }

    @Override
    
public   void  setValueAt(Object aValue,  int  row,  int  column) {
        
if  (column  ==   5 ) {
            
this .selections[row]  =  (Boolean) aValue;
            
this .fireTableRowsUpdated(row, row);
        }
    }

    
private   void  generateSelections() {
        
this .selections  =   new   boolean [ this .getDataVector().size()];
    }

    @Override
    
public   boolean  isCellEditable( int  row,  int  column) {
        
return  column  ==   5 ;
    }

    
public  List < Staff >  getSelectedStaffs() {
        List
< Staff >  staffList  =   new  ArrayList < Staff > ();
        Vector data 
=   this .getDataVector();
        
for  ( int  i  =   0 ; i  <   this .selections.length; i ++ ) {
            
if  ( this .selections[i]) {
                staffList.add((Staff) data.get(i));
            }
        }
        
return  staffList;
    }

    
public   boolean  isRowSelected( int  row) {
        
return   this .selections[row];
    }

    
public   void  selectAll() {
        
for  ( int  i  =   0 ; i  <   this .selections.length; i ++ ) {
            
this .selections[i]  =   true ;
        }
        
this .fireTableDataChanged();
    }

    
public   void  deselectAll() {
        
for  ( int  i  =   0 ; i  <   this .selections.length; i ++ ) {
            
this .selections[i]  =   false ;
        }
        
this .fireTableDataChanged();
    }
}

 

public   class  TestTable{
    
public   static   void  main(String[] args){
        JTable table 
=   new  JTable();
        table.setDefaultRenderer(Boolean.
class ,
                
new  StaffTableCheckBoxRenderer());
        table.getSelectionModel().setSelectionMode(
                ListSelectionModel.SINGLE_SELECTION);
        table.setColumnSelectionAllowed(
false );
        table.getColumnModel().getColumn(
5 ).setHeaderRenderer(
                
new  StaffTableCheckBoxHeaderRenderer( new  ItemListener() {

            
public   void  itemStateChanged(ItemEvent e) {
                
if (e.getStateChange()  ==  ItemEvent.SELECTED){
                    ((StaffTableModel)table.getModel()).selectAll();
                }
else   if (e.getStateChange()  ==  ItemEvent.DESELECTED){
                    ((StaffTableModel)table.getModel()).deselectAll();
                }
            }
        }));
        JScrollPane sp 
=   new  JScrollPane(table);
        JFrame frm 
=   new  JFrame();
        frm.getContentPane().add(sp, BorderLayout.CENTER);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.pack();
        frm.setVisible(
true );
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值