Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使特定的jTable布尔列可编辑_Java_Swing_Jtable_Defaulttablemodel - Fatal编程技术网

Java 如何使特定的jTable布尔列可编辑

Java 如何使特定的jTable布尔列可编辑,java,swing,jtable,defaulttablemodel,Java,Swing,Jtable,Defaulttablemodel,我有一个方法返回由数据库填充的DefaultTableModel。我想做的是通过向返回的DefaultTableModel实例添加一个新的布尔列,向返回的每个记录添加布尔复选框。用户应该只能单击/取消单击这些复选框(应允许多选)来操作GUI中的一些地图对象。其他列应不可编辑。关于如何实现这一点有什么想法吗?到目前为止,我已经讨论了以下几点,我扩展了TableCellRenderer,如下所示 public class UGIS_BooleanTableCellRenderer extends J

我有一个方法返回由数据库填充的DefaultTableModel。我想做的是通过向返回的DefaultTableModel实例添加一个新的布尔列,向返回的每个记录添加布尔复选框。用户应该只能单击/取消单击这些复选框(应允许多选)来操作GUI中的一些地图对象。其他列应不可编辑。关于如何实现这一点有什么想法吗?到目前为止,我已经讨论了以下几点,我扩展了TableCellRenderer,如下所示

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