Habilitar é desabilitar linha em Jtable

1 resposta
D

Salve, estou fazendo um projeto preciso habilitar e desabilitar a escrita na linha de uma Jtable, através de uma coluna da mesma, assim:
São linhas criadas através de um “for” que traz dados do BD, contem o primeira coluna o dado do banco que não pode ser editado, a segunda coluna um check-box para ativar e desativar a linha, e as 10 seguintes colunas para inserir informação.
Preciso que quando o usuário clicar e deixa check-box no estado checked a linha não permita ser editada, quando desativar liberar normalmente.

segue a classe que criei para fazer a tabela.

import br.com.hwn.posunip.conections.DataBase;

import br.com.hwn.posunip.control.SwitchQuery;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.*;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.ListSelectionModel;

import javax.swing.table.AbstractTableModel;

import javax.swing.table.JTableHeader;

public class FieldTableClass extends JPanel {

private SwitchQuery querys;
private DataBase banco;

public FieldTableClass() {
    super(new GridLayout(1, 0));
    //instancia as classes de banco e as querys       
    this.banco = new DataBase();
    this.querys = new SwitchQuery();
    //inicia as variaveis e se conecta com o banco
    boolean conectar = true;
    conectar = this.banco.Connect("org.gjt.mm.mysql.Driver", "jdbc:mysql://189.113.163.43/posunip_dbposunip", "posunip_dbposuni", "X3YP9GvrUKChKq");//producao
    ResultSet rs = this.banco.SQLDQL(this.querys.SwitchQueriesScreen("convenios"));
    //inicia a criação da tabela
    final JTable table = new JTable(new MyTableModel());
    MyTableModel tablemodel = (MyTableModel) table.getModel();
    table.setPreferredScrollableViewportSize(new Dimension(800, 100));
    table.setFillsViewportHeight(true);
    if (null != rs) {
        try {
            while (true == rs.next()) {
                Object[] values = {rs.getString("Sigla"), new Boolean(false), "", "", "", "", "", "", "", "", "", ""};
                tablemodel.insertData(values);
            }
        } catch (SQLException ex) {
            Logger.getLogger(FieldTableClass.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    JTableHeader tableHeader = table.getTableHeader();
    tableHeader.setResizingAllowed(false);
    tableHeader.setReorderingAllowed(false);
    table.setGridColor(Color.BLACK);
    table.setRowHeight(30);
    table.setAutoCreateRowSorter(true);
    table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
    table.getColumnModel().getColumn(0).setMinWidth(40);
    table.getColumnModel().getColumn(0).setPreferredWidth(40);
    table.getColumnModel().getColumn(1).setMinWidth(40);
    table.getColumnModel().getColumn(1).setPreferredWidth(40);
    table.getColumnModel().getColumn(2).setMinWidth(90);
    table.getColumnModel().getColumn(2).setPreferredWidth(90);
    table.getColumnModel().getColumn(3).setMinWidth(90);
    table.getColumnModel().getColumn(3).setPreferredWidth(90);
    table.getColumnModel().getColumn(4).setMinWidth(90);
    table.getColumnModel().getColumn(4).setPreferredWidth(90);
    table.getColumnModel().getColumn(5).setMinWidth(110);
    table.getColumnModel().getColumn(5).setPreferredWidth(110);
    table.getColumnModel().getColumn(6).setMinWidth(90);
    table.getColumnModel().getColumn(6).setPreferredWidth(90);
    table.getColumnModel().getColumn(7).setMinWidth(90);
    table.getColumnModel().getColumn(7).setPreferredWidth(90);
    table.getColumnModel().getColumn(8 ).setMinWidth(90);
    table.getColumnModel().getColumn(8 ).setPreferredWidth(90);
    table.getColumnModel().getColumn(9).setMinWidth(90);
    table.getColumnModel().getColumn(9).setPreferredWidth(90);
    table.getColumnModel().getColumn(10).setMinWidth(90);
    table.getColumnModel().getColumn(10).setPreferredWidth(90);
    table.getColumnModel().getColumn(11).setMinWidth(90);
    table.getColumnModel().getColumn(11).setPreferredWidth(90);

    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    //Create the scroll pane and add the table to it.
    JScrollPane scrollPane = new JScrollPane(table);
    //Add the scroll pane to this panel.
    add(scrollPane);
}

class MyTableModel extends AbstractTableModel {

    private String[] columnNames = {"Tipo", "Ativo", "nº meses dura.", "nº par. finan.", "val. sem. 5 par.", "par. sem desc. uni.", "val. desc. unid.", "val desc. espe.", "val final par.", "val. bolsa finan.", "val. sem. serv.", "val. matr. serv."};
    private Vector data = new Vector();
    public final Object[] longValues = {"", Boolean.TRUE, new Integer(20), new Integer(20), new Float(20), new Float(20), new Float(20), new Float(20), new Float(20), new Float(20), new Float(20), new Float(20)};
    public boolean[] canEdit = new boolean[]{false, true, true, true, true, true, true, true, true, true, true, true};
    public boolean[] cantEdit = new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false};

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int row, int col) {
        return ((Vector) data.get(row)).get(col);
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }

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

    @Override
    public void setValueAt(Object value, int row, int col) {
        ((Vector) data.get(row)).setElementAt(value, col);
        fireTableCellUpdated(row, col);
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return canEdit[col];
    }

    public void insertData(Object[] values) {
        data.add(new Vector());
        for (int i = 0; i < values.length; i++) {
            ((Vector) data.get(data.size() - 1)).add(values[i]);
        }
        fireTableDataChanged();
    }

    public void removeRow(int row) {
        data.removeElementAt(row);
        fireTableDataChanged();
    }
}

public static void createAndShowGUI() {
    JFrame frame = new JFrame("Abstract Table Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    FieldTableClass newContentPane = new FieldTableClass();
    frame.add(newContentPane);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}

1 Resposta

F

O ViniGodoy postou essas dicas abaixo em um post aki do fórum, não li ainda mas deve ter algo q possa te ajudar:

Criado 4 de junho de 2013
Ultima resposta 5 de jun. de 2013
Respostas 1
Participantes 2