最近要采用swing写程序遇到了这个问题,在网上搜了一些方法,经过多次努力,终于实现,将调试通过的代码拿出来分享,希望有用啊
主要由三个文件:CheckBoxRenderer.java CheckButtonEditor.java CheckboxTable.java
1、CheckBoxRenderer.java
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
class CheckBoxRenderer implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus, int row,
int column) {
if (value == null)return null;
return (Component) value;
}
}
2、CheckButtonEditor.java
import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JTable;
class CheckButtonEditor extends DefaultCellEditor
implements ItemListener {
private JCheckBox button;
public CheckButtonEditor(JCheckBox checkBox) {
super(checkBox);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row,
int column) {
if (value == null)return null;
button = (JCheckBox) value;
button.addItemListener(this);
return (Component) value;
}
public Object getCellEditorValue() {
button.removeItemListener(this);
return button;
}
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
}
3、CheckboxTable.java
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JFrame.*;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import com.borland.jbcl.layout.*;
public class CheckboxTable implements MouseListener{
JTable table = new JTable();
XYLayout xYLayout1 = new XYLayout();
public CheckboxTable() {
JFrame frame = new JFrame("Table");
table = this.gettable();
table.addMouseListener(this);
JScrollPane src = new JScrollPane(table);
frame.getContentPane().add(src);
frame.setSize(new Dimension(400, 200));
frame.setVisible(true);
}
public JTable gettable() {
DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(
new Object[][] { {"(1,1)", "(1,2)", "(1,3)", "(1,4)", "(1,5)", new JCheckBox("1")},
{"(2,1)", "(2,2)", "(2,3)", "(2,4)", "(2,5)", new JCheckBox("2")},
{"(3,1)", "(3,2)", "(3,3)", "(3,4)", "(3,5)", new JCheckBox("3")},
},
new Object[] {"第1列", "第2列", "第3列", "第4列", "第5列", "选取"});
JTable table = new JTable(dm) {
public void tableChanged(TableModelEvent e) {
super.tableChanged(e);
repaint();
}
};
table.getColumn("选取").setCellEditor(new CheckButtonEditor(new JCheckBox()));
table.getColumn("选取").setCellRenderer(new CheckBoxRenderer());
return table;
}
public static void main(String args[]) {
new CheckboxTable();
}
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}