簡體   English   中英

jTable中的CheckBox?

[英]CheckBox in jTable?

我已在表格中的行中添加了一個復選框,但是很遺憾,我無法選擇/取消選擇它們。

我正在使用自己在互聯網上獲得的表模型。

表模型的代碼:

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

我可以使用哪個代碼? 另外,我將這段代碼放在哪里?

但是很遺憾,我無法選擇/取消選擇它們。

您沒有在TableModel中實現setValueAt(...)方法,因此該值永遠無法在模型中更新。

我正在使用自己在互聯網上獲得的表模型。

為什么要使用自定義TableModel? 您可以使用DefaultTableModel 它正確地實現了setValueAt(...)方法。 它還具有addRow(..)方法,可讓您動態更新模型。

您實際上是在TableModel中存儲Boolean對象嗎? 我看不到您使用getBoolean()從ResultSet中獲取數據。 僅當列中包含布爾數據時,才使用復選框的默認渲染器/編輯器。

還請看一下: 無法在JTable中創建帶有復選框的列,以更好地實現getColumnClass()方法。

如果您堅持使用自定義TableModel,請查看上一個問題中給您的Swing教程鏈接。 它顯示了實現setValueAt()方法的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM