Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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_Mysql_Swing_Jtable_Jcheckbox - Fatal编程技术网

Java 如何在JTable中选中多个复选框?

Java 如何在JTable中选中多个复选框?,java,mysql,swing,jtable,jcheckbox,Java,Mysql,Swing,Jtable,Jcheckbox,所以我有一张桌子: table = new JTable(); 哪些模型是我的模型:table.setModel(model) 里面有一个叫做CheckColumn的列,它只有复选框 问题是,如果我选中一个复选框,它会选中它,如果我想选中另一个复选框,它会删除上一个复选框。因此,它只允许我选中一个复选框 对于复选框,我使用以下选项: table.getColumnModel().getColumn(15).setCellEditor(new CheckBoxCellEditor()); tab

所以我有一张桌子:

table = new JTable();
哪些模型是我的模型:
table.setModel(model)

里面有一个叫做CheckColumn的列,它只有复选框

问题是,如果我选中一个复选框,它会选中它,如果我想选中另一个复选框,它会删除上一个复选框。因此,它只允许我选中一个复选框

对于复选框,我使用以下选项:

table.getColumnModel().getColumn(15).setCellEditor(new CheckBoxCellEditor());
table.getColumnModel().getColumn(15).setCellRenderer(new CWCheckBoxRenderer());
从课程中:

class CheckBoxCellEditor extends AbstractCellEditor implements TableCellEditor {

    private static final long serialVersionUID = 1L;
    protected JCheckBox checkBox;

    public CheckBoxCellEditor() {
        checkBox = new JCheckBox();
        checkBox.setHorizontalAlignment(SwingConstants.CENTER);
        checkBox.setBackground(Color.white);
    }

    public Component getTableCellEditorComponent(
            JTable table,
            Object value,
            boolean isSelected,
            int row,
            int column) {

        checkBox.setSelected(((Boolean) value).booleanValue());

        Component c = table.getDefaultRenderer(String.class).getTableCellRendererComponent(table, value, isSelected, false, row, column);
        if (c != null) {
            checkBox.setBackground(c.getBackground());
        }

        return checkBox;
    }
    public Object getCellEditorValue() {
        return Boolean.valueOf(checkBox.isSelected());
    }
}
以及:

我希望能够检查多行。有人能告诉我怎么做吗?代码中是否有需要修改的内容,或者我需要一种新的方法

这是模型外观的摘要:

    private static final int CheckCol = 15;
    private List<Clients> clients;

    public boolean isCellEditable(int row, int col){
             if(col == 15){
                 return true;

             }
             return false;
         }


    public void setValueAt(Object value, int row, int col) {
            //if(col==15) (not sure what to do in here)

            //fireTableCellUpdated(row, col);
        }

    public Object getValueAt(int row, int col) {
            Clients tempClient = clients.get(row);

            switch (col) {

            case CheckCol:
                return false;  //my CheckColumn type is Boolean


            default:
                return false;

            }
}
private static final int CheckCol=15;
私人名单客户;
公共布尔值可编辑(int行,int列){
如果(列==15){
返回true;
}
返回false;
}
public void setValueAt(对象值、整行、整列){
//if(col==15)(不确定在这里做什么)
//FireTableCell更新(行、列);
}
公共对象getValueAt(整数行,整数列){
Clients tempClient=Clients.get(行);
开关(col){
案例检查:
return false;//我的CheckColumn类型为Boolean
违约:
返回false;
}
}
我已经想尽一切办法来改变模型……有人能告诉我模型应该是什么样子吗?我需要从mysql服务器获取数据,但我不知道如何对复选框列建模


提前谢谢

有存储结果的模型吗?你是什么意思?复选框的结果是什么?是的。当编辑器被关闭时,是否会通知模型(通过setValueAt方法),是否会在内部存储该值,以便通过getValueAt方法返回该值对不起,我是新手。应该是这样的:
objectstatus=table.getModel().getValueAt(第15行);
table.getModel().setValueAt(值,行,15)或如何?15是复选框列的编号。不,它应该自动完成。您的
TableModel
是如何实现的
    private static final int CheckCol = 15;
    private List<Clients> clients;

    public boolean isCellEditable(int row, int col){
             if(col == 15){
                 return true;

             }
             return false;
         }


    public void setValueAt(Object value, int row, int col) {
            //if(col==15) (not sure what to do in here)

            //fireTableCellUpdated(row, col);
        }

    public Object getValueAt(int row, int col) {
            Clients tempClient = clients.get(row);

            switch (col) {

            case CheckCol:
                return false;  //my CheckColumn type is Boolean


            default:
                return false;

            }
}