jtable checkbox render

来源:互联网 发布:细说php视频下载 编辑:程序博客网 时间:2024/06/14 03:31
 

package com.ui;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

public class TestJtable extends JFrame{

 private  JCheckBox jCheckBox = new JCheckBox();
 private Map<Integer,JCheckBox> checkBoxes = new HashMap<Integer, JCheckBox>();
 final TestJtable testJtable = this;
 TableModel tableModel = null;
  Object[][] datas = {
   {"","a","b","c"},
   {"","a1","b1","c1"},
   {"","a2","b2","c2"},
   {"","a3","b3","c3"},
   };
 final String[] column = {"checkBox","C_1" , "C_2","C_3"};
 
 public TestJtable(){
  this.setBounds(300, 300, 300, 300);
  layoutCompent();
  this.setVisible(true);
 }
 
 public void layoutCompent(){
  
  tableModel = new DefaultTableModel(datas,column);
  final JTable jtable = new JTable(tableModel);
  DefaultCellEditor cde = new DefaultCellEditor(new JCheckBox()){
   @Override
   public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    if(value != null && value instanceof JCheckBox){
     return (Component) value;
    }
    return super.getTableCellEditorComponent(table, value, isSelected, row, column);
   }
  };
  jtable.getColumn("checkBox").setCellEditor(cde);
  jtable.getColumn("checkBox").setCellRenderer(new TableCellRenderer(){

   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
     int row, int column) {
    JCheckBox jcb = checkBoxes.get(row);
    if(jcb == null){
     jcb =  new JCheckBox();
    }
    if(value != null ){
     jcb.setSelected(new Boolean(value.toString()));
     
     return jcb;
    }
    
    return jcb;
   }
   
  });
  jtable.getColumn("checkBox").setMaxWidth(20);
  jtable.addMouseListener(new MouseAdapter(){
   
   int dragStartRow = 0;
   int dragEndRow = 0;
   
   public void mouseClicked(MouseEvent e) {
    
    int selectAll = jtable.getSelectedColumn();
    if(selectAll == 0){
     for(int i =1 ; i<3 ; i++){
      Boolean isSelect = new Boolean(jtable.getModel().getValueAt(i, 0).toString());
      jtable.getModel().setValueAt(!isSelect, i, 0);
      System.out.println(isSelect);
     }
    }
    System.out.println("cc"+jtable.getSelectedRow());
   }
   
   @Override
   public void mousePressed(MouseEvent e) {
    dragStartRow = jtable.rowAtPoint(e.getPoint());
    System.out.println("dragStartRow : "+dragStartRow);
   }
   
   @Override
   public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub
    dragEndRow = jtable.rowAtPoint(e.getPoint());
    System.out.println("dragEndRow:"+dragEndRow);
    for(int i = 0 ; i<datas.length;i++){
     jtable.getModel().setValueAt("false", i, 0);
    }
    for(int i = dragStartRow;i<=dragEndRow;i++){
     jtable.getModel().setValueAt("true", i, 0);
    }
    System.out.println("mouseReleased");
   }
  });
  this.add(jtable);
 }
 
 public static void main(String[] args) {
  TestJtable tj = new TestJtable();
 }

 
}

原创粉丝点击