在Table里加一列checkbox的代码如下: 不太明白选checkbox是怎么实现的?
JTable table = null;
private JTable getTable() {
if (table == null) {
table = new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setModel(new DefaultTableModel(data, columnNames) {
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Boolean.class;
}
if (columnIndex == 1) {
return Date.class;
}
return super.getColumnClass(columnIndex);
}
public boolean isCellEditable(int row, int column) {
if (column == 0) {
return true;
}
return false;
}
});
TableColumnModel columnModel = table.getTableHeader().getColumnModel();
columnModel.getColumn(0).setMinWidth(40);
columnModel.getColumn(0).setMaxWidth(40);
columnModel.getColumn(1).setMaxWidth(100000);
columnModel.getColumn(2).setMaxWidth(1000000);
columnModel.getColumn(3).setMinWidth(40);
columnModel.getColumn(3).setMaxWidth(40);
table.setRowHeight(table.getRowHeight() + 10);
}
return table;
}
JTable table = null;
private JTable getTable() {
if (table == null) {
table = new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setModel(new DefaultTableModel(data, columnNames) {
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Boolean.class;
}
if (columnIndex == 1) {
return Date.class;
}
return super.getColumnClass(columnIndex);
}
public boolean isCellEditable(int row, int column) {
if (column == 0) {
return true;
}
return false;
}
});
TableColumnModel columnModel = table.getTableHeader().getColumnModel();
columnModel.getColumn(0).setMinWidth(40);
columnModel.getColumn(0).setMaxWidth(40);
columnModel.getColumn(1).setMaxWidth(100000);
columnModel.getColumn(2).setMaxWidth(1000000);
columnModel.getColumn(3).setMinWidth(40);
columnModel.getColumn(3).setMaxWidth(40);
table.setRowHeight(table.getRowHeight() + 10);
}
return table;
}
if (columnIndex == 0) {
return Boolean.class;
}的用意。返回该列类型为 Boolean类,就告诉Swing应用JCheckBox为默认设置。当然也可以自己代码指定自选的控件类作为绘制器或者编辑器。如下:渲染器是你从外观上看到单元格的样子,而当你点击该单元格,进入编辑状态,那么该单元格将被编辑器所接管。以你需要的JCheckBox为例,就是将某列单元格的渲染器和编辑器都指定为一个JCheckBox实例,如果只指定渲染器为JCheckBox,编辑器为默认,那么看上去是JCheckBox显示,但当输入焦点进入单元格时,确实文本编辑;反之,如果设定编辑器为JCheckBox,渲染器为默认,那么你会看到该单元格显示的是true 或者 false,而点击进去,确实出现JCheckBox进行选择。下面具体列出一段代码:TableColumn column = table1.getColumnModel().getColumn(1);
//设置编辑器
column.setCellEditor(new DefaultCellEditor(new JCheckBox();));
//设置渲染器
column.setCellRenderer(new CheckBoxRenderer());CheckBoxRenderer 是一个自己编写的实现TableCellRenderer接口的类public class CheckBoxRenderer implements TableCellRenderer{public JCheckBox chk;public CheckBoxRenderer(){this.chk = new JCheckBox();} //其中主要要实现这个函数
public Component getTableCellRendererComponent(JTable arg0, Object value, boolean isSelected, boolean arg3, int arg4, int arg5) {this.chk.setSelected(Boolean.TRUE == value);
this.chk.setEnabled(isSelected);
this.chk.setHorizontalAlignment(JCheckBox.CENTER);
return this.chk;}}我只是简单举了个例子,详细的技术细节请参阅JDK和其他权威资料