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