今天做项目 用到了jtable的列中添加jcheckbox组件,网上搜了下发现下面的小例子很不错:
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
public class MmCheck {
public static void main(String[] args) {
MyTableFrame myframe = new MyTableFrame();
}
}
class MyTableFrame extends JFrame {
JTable table;
MyTableFrame() {
table = new JTable();
add(new JScrollPane(initTable(table)));
setBounds(100, 100, 500, 300);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JTable initTable(JTable table) {
DefaultTableModel dtm = new DefaultTableModel(new Object[] { "是否选中", "姓名",
"年龄", "班级", "性别" }, 0);
dtm
.addRow(new Object[] { new Boolean(true), "fox", "12",
"050101", "男" });
table.setModel(dtm);
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));
tcm.getColumn(0).setCellRenderer(new MyTableRenderer());
tcm.getColumn(0).setPreferredWidth(20);
tcm.getColumn(0).setWidth(20);
tcm.getColumn(0).setMaxWidth(20);
return table;
}
}
class MyTableRenderer extends JCheckBox implements TableCellRenderer {
// 此方法可以查考JDK文档的说明
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Boolean b = (Boolean) value;
this.setSelected(b.booleanValue());
return this;
}
}
刚看到又一个比较好用的方法,让JCheckBox显示出来:
TableColumn tc = table.getColumnModel().getColumn(0);
tc.setCellEditor(table.getDefaultEditor(Boolean.class));
tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));
只要这3行就能为jtable中的第一列的boolean值 转换为jcheckbox显示出来