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 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) {
}
}
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();
}
}
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 );
}
}
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 );
}
}