Como faço para bloquear a edição das células (todas) em um jTable? Parece simples, usa setEnable (false); mas daí não consigo ponterar o registro (selecionar a linha), não existe setEditable() para tabelas.
scrollTableGaragem = new JScrollPane();
tableGaragem = new JTable();
tableGaragem.setModel(new DefaultTableModel(
new Object [][] { },
new String [] {"Placa", "Hora", "Data", "Veículo", "Funcionário"})
);
tableGaragem.getTableHeader().setReorderingAllowed(false);
scrollTableGaragem.setLocation(2,15);
A delaração da table e da scrollTable estão no início da classe, o scrollTable é add em um painel mas a diante.
Tudo funciona perfeitamente.
Valeu gente! :thumbup:
Abaixo consta um exemplo de como sobrescrever a classe DefaultTableModel.
Você define a edição ou não das células de uma coluna através da variável boolean[] canEdit
.
this.jTable.setModel( new javax.swing.table.DefaultTableModel(dados, this.TITLE_COLUMN){
Class[] types = new Class[]{Integer.class, String.class};
boolean[] canEdit = new boolean []{
false, false
};
@Override
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
1 curtida
:shock: :shock: :shock:
O seu código está um pouco complicado para entender, teria como você me explicar o que faz cada parte e me mostrar como ficaria na minha atual tabela?
Valeu! :thumbup:
O teu exemplo ficaria assim:
scrollTableGaragem = new JScrollPane();
tableGaragem = new JTable();
tableGaragem.setModel(new DefaultTableModel(
new Object [][] { },
new String [] {"Placa", "Hora", "Data", "Veículo", "Funcionário"}){
boolean[] canEdit = new boolean []{
false, false, false, false
};
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tableGaragem.getTableHeader().setReorderingAllowed(false);
scrollTableGaragem.setLocation(2,15);
Cada valor da variável canEdit
representa uma coluna. Se informar true, todas células da coluna permitem serem editadas; se false, não.
1 curtida
Por padrão, a classe DefaultTableModel
define que as células de cada coluna são editáveis. Se você quiser que alguma coluna NÃO seja editada, é necessário sobrescrever algumas coisas dentro dela. No nosso caso, é necessário editar a variável canEdit
e o método isCellEditable
.
Espero ter ajudado.
:shock: :shock: :shock:
Até que não deu erro de compilação mas a tabela desapareceu!
Haaa… Errei na quantidade dos false na variável canEdit
Coloquei 4, mas são 5.
Fica assim:
scrollTableGaragem = new JScrollPane();
tableGaragem = new JTable();
tableGaragem.setModel(new DefaultTableModel(
new Object [][] { },
new String [] {"Placa", "Hora", "Data", "Veículo", "Funcionário"}){
boolean[] canEdit = new boolean []{
false, false, false, false, false
};
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tableGaragem.getTableHeader().setReorderingAllowed(false);
scrollTableGaragem.setLocation(2,15);
Só muda o canEdit
.
Cara, a tabela continua desaparecendo. Desculpa a minha ignorância, é que sou leigo em jTable e estou apanhnado com elas!
:thumbup: :thumbup: :thumbup:
[quote=Eder Peixoto]Haaa… Errei na quantidade dos false na variável
Só muda o canEdit
.[/quote]
O que vc quer dizer com isto?
Como tua tabela possui 5 colunas, então é necessário informar que todas NÃO serão editáveis. Para fazer isso, você informa na variável canEdit um array de tamanho 5, sendo todos parâmetros false.
boolean[] canEdit = new boolean []{ false, false, false, false, false };
O problema é que eu tinha te informado que canEdit recebia 4 elementos false.
Por acaso está disparando alguma Exception? Se NÃO, coloque o método setmodel dentro de um bloco try/catch, e utilize o método printStackTrace para verificar o que está ocorrendo.
Se continuar o problema, poste-o aí.
O pior é que não dispara exception nenhuma…
:?: :?: :?: :?: :?:
Não testei, mas o problema pode ser aqui:
new Object [][] { }
Tente colocá-lo como null, para ver se o problema persiste.
Ficaria assim:
scrollTableGaragem = new JScrollPane();
tableGaragem = new JTable();
tableGaragem.setModel(new DefaultTableModel(
null,
new String [] {"Placa", "Hora", "Data", "Veículo", "Funcionário"}){
boolean[] canEdit = new boolean []{ false, false, false, false, false };
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tableGaragem.getTableHeader().setReorderingAllowed(false);
scrollTableGaragem.setLocation(2,15);
Rodou aqui!!!
Estava faltando isto: scrollTableGaragem.setViewportView(tableGaragem);
Foi mau cara…Me desculpa ai e muito obrigado pela paciência e ajuda!
Valeu Eder Peixoto :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup:
Que nada, o fórum é pra isso.
E o bom é que também estou agora quebrando a cabeça pra fazer com que o meu JTable inicie com a largura de uma determinada coluna, com o tamanho que eu quiser (por exemplo: coluna 0 (zero), deve iniciar com tamanho 40).
Até mais…
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(0).setResizable(false);
Onde table é o nome da sua tabela, o número do getColumn() é o índice da sua coluna.
Também coloquei ai como travar o reSize de uma coluna.
Adiciona isso depois daquilo tudo que fizemos.
Até ! :thumbup: :thumbup: :thumbup:
[quote=Eder Peixoto]Abaixo consta um exemplo de como sobrescrever a classe DefaultTableModel.
Você define a edição ou não das células de uma coluna através da variável boolean[] canEdit
.
[code]
this.jTable.setModel( new javax.swing.table.DefaultTableModel(dados, this.TITLE_COLUMN){
Class[] types = new Class[]{Integer.class, String.class};
boolean[] canEdit = new boolean []{
false, false
};
@Override
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
[/code][/quote]
Opa blz deu certo!