Java 如何使特定的jTable布尔列可编辑
我有一个方法返回由数据库填充的DefaultTableModel。我想做的是通过向返回的DefaultTableModel实例添加一个新的布尔列,向返回的每个记录添加布尔复选框。用户应该只能单击/取消单击这些复选框(应允许多选)来操作GUI中的一些地图对象。其他列应不可编辑。关于如何实现这一点有什么想法吗?到目前为止,我已经讨论了以下几点,我扩展了TableCellRenderer,如下所示Java 如何使特定的jTable布尔列可编辑,java,swing,jtable,defaulttablemodel,Java,Swing,Jtable,Defaulttablemodel,我有一个方法返回由数据库填充的DefaultTableModel。我想做的是通过向返回的DefaultTableModel实例添加一个新的布尔列,向返回的每个记录添加布尔复选框。用户应该只能单击/取消单击这些复选框(应允许多选)来操作GUI中的一些地图对象。其他列应不可编辑。关于如何实现这一点有什么想法吗?到目前为止,我已经讨论了以下几点,我扩展了TableCellRenderer,如下所示 public class UGIS_BooleanTableCellRenderer extends J
public class UGIS_BooleanTableCellRenderer extends JCheckBox implements TableCellRenderer {
public UGIS_BooleanTableCellRenderer() {
setHorizontalAlignment(JLabel.CENTER);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setSelected((value != null && ((Boolean) value).booleanValue()));
return this;
}
}
我也可以重写isCellEditable方法
DefaultTableModel dm = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return column == 3;
}
};
但是如何使方法返回的DefaultTableModel与重写的dm实例兼容?在此方面的任何帮助都将不胜感激。您可以使用复选框列,而无需编写自定义渲染器/编辑器,只需覆盖
getColumnClass()
TableModel的方法。以下是使用复选框列的简单示例:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Example extends JFrame {
public static void main(String... s){
new Example();
}
public Example(){
DefaultTableModel model = new DefaultTableModel(4,4) {
@Override
public boolean isCellEditable(int row, int column) {
return column == 3;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex == 3){
return Boolean.class;
}
return super.getColumnClass(columnIndex);
}
};
JTable t = new JTable(model);
add(new JScrollPane(t));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}
import javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公共类示例扩展了JFrame{
公共静态无效主(字符串…s){
新例子();
}
公共示例(){
DefaultTableModel=新的DefaultTableModel(4,4){
@凌驾
公共布尔值可编辑(int行,int列){
返回列==3;
}
@凌驾
公共类getColumnClass(int columnIndex){
如果(columnIndex==3){
返回Boolean.class;
}
返回super.getColumnClass(columnIndex);
}
};
JTable t=新的JTable(模型);
添加(新的JScrollPane(t));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
包装();
setVisible(真);
}
}