java - jTable 中的复选框?

标签 java swing jdbc jtable jcheckbox

我已向表格中的行添加了一个复选框,但遗憾的是我无法选择/取消选择它们。

我正在使用我在互联网上获得的自己的表格模型。

表模型的代码:

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
/**************/

public class ModeloTabela extends AbstractTableModel {
    private ArrayList linhas = null;
    private String [] colunas = null;

    public ModeloTabela(ArrayList lin, String[] col){
        setLinhas(lin);
        setColunas(col);
    }
    public ArrayList getLinhas(){
        return linhas;

    }
    public void setLinhas(ArrayList dados){
        linhas = dados;
    }
    public String[] getColunas(){
        return colunas;
    }
    public void setColunas(String [] nomes){
        colunas = nomes;
    }
    public int getColumnCount(){
        return colunas.length;
    }
    public int getRowCount(){
        return linhas.size();
    }
    public String getColumnCount (int numCol){
        return colunas[numCol];
    }

    public Object getValueAt(int numLin, int numCol){
        Object[] linha = (Object[])getLinhas().get(numLin);
        return linha[numCol];
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        return true;
    }
}

这个方法将填充表格:

public void PreencheTabela(String sql, JTable jt1, JTextField j1){
        c.conexao();
        ArrayList dados = new ArrayList();
    String [] Colunas = new String[] {"STATUS", "ID", "FABRICANTE", "FORNECEDOR", "NOME", "CATEGORIA", "DATA DO CADASTRO", " CODIGO DE BARRAS", "QUANTIDADE"};

    c.executaSQL(sql);
    try { 
        c.rs.first();
        do{
        dados.add(new Object[]{c.rs.getInt("prod_id"),c.rs.getString("prod_fabricante"),c.rs.getString("prod_fornecedor"),c.rs.getString("prod_nome"),
            c.rs.getString("prod_categoria"),c.rs.getDate("prod_datacadastro"),c.rs.getString("prod_codbarras"), c.rs.getInt("est_quantidade")});
        j1.setBorder(BorderFactory.createLineBorder(Color.black));
    }while(c.rs.next());

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro!\n"+ex.getMessage());
    }
    ModeloTabela modelo = new ModeloTabela(dados, Colunas);
    jt1.setModel(modelo);
}

我可以使用哪个代码?另外,我应该把这段代码放在哪里?

最佳答案

but unfortunately I'm unable to select/deselect them.

您没有在 TableModel 中实现 setValueAt(...) 方法,因此该值永远无法在模型中更新。

I'm using an own Table Model that I got on internet.

为什么要使用自定义 TableModel?您可以使用DefaultTableModel。它正确实现了 setValueAt(...) 方法。它还具有一个 addRow(..) 方法,允许您动态更新模型。

您实际上是否在 TableModel 中存储 Boolean 对象?我没有看到您使用 getBoolean() 从 ResultSet 中获取数据。仅当列中有 boolean 数据时,才会使用复选框的默认渲染器/编辑器。

另请查看:Can't create column with checkboxes in JTable更好地实现 getColumnClass() 方法。

如果您坚持使用自定义 TableModel,请查看上一个问题中提供的 Swing 教程链接。它显示了实现 setValueAt() 方法的示例。

关于java - jTable 中的复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259503/

相关文章:

java - 使用 LookAndFeel 进行 JFrame 序列化

Java swing,JButton 在第一次按下按钮时不会重新调整大小,但会在第二次按下时重新调整大小

java - 如何在 Java 中读取 INFORMIX 表 JSON 列

java - 远程连接 Access 数据库?

java - 更改后的整数值没有显示在代码的其他部分?

java - 迭代二维数组

java - 如何从 JavaSwing GUI 打开 JavaFX GUI?

java - MySQL通过连接池进行流量压缩

java - Apache POI Word 文档中表格单元格的内容居中并加粗

java - 堆叠 JLayer 类(到 JPanel)