Bloquear celula com base em uma condição

Tenho uma Jtable onde é lançado alguns resultados de testes. Como sou novato em java, gostaria de saber como faço para bloquear algumas células com base em uma condição.

eu tenho 4 condições que são escolhidas em um outro formulário e que ficam em uma coluna dessa jtable, Min e Max, Texto, No Min e No Max.
Na tabela eu tenho 2 campos para registrar os dados Resultado_Numerico e Resultado_Texto

Quando o teste for “Min e Max”, “No Min” e “No Max” quer dizer que a pessoa deve lançar o valor na coluna Resultado_Numerico e quando for “Texto” a pessoa deve lançar na coluna Resultado_texto.

Tem Cadastro que contem 120 teste e tem cadastro que contem 90…
para cada linha a pessoa deve lançar um desses valores.

Para evitar problemas na hora de cadastro, eu gostaria de travar a célula com base na explicação a cima, fazendo com que a pessoa registre os dados apenas na célula correta.

Alguém poderia me ajudar por favor?

Sobrescreva o método isCellEditable de seu TableModel, de forma à atender suas condições.

staroki, como sou novo, estou um pouco confuso com tudo.

fico confuso pelo fato de ter celula que vai bloquear e ter q não

eu uso esse código para travar as outras colunas e deixar apenas essas aberta para lançar os dados…

poderia me dar uma resposta mais clara por favor?

public boolean isCellEditable(int row, int col) {
if (col == 30 || col == 31 || col == 32 || col == 33 ) {
return true;
} else {
return false;
}
}

};

O que não ficou claro?

Posta o código completo do seu TableModel.

Então, eu fico confuso como que vou fazer para checar linha por linha na coluna 26 que é a minha da condição

JComboBox combo;
    DefaultTableModel modelo = new DefaultTableModel(null, new String[]{"ID", "Ordem", "Linha", "Linha_Tipo",
        "Setor", "Perfil", "Bpcs", "Desc_Perfil", "Projeto", "OEM", "Nº_Desenho", "Nº_Plano", "Operação",
        "Equipamento", "Desc_Teste", "Complemento", "Cod_Teste", "Espec_Min", "Espec_Max",
        "Espec_Unid", "Espec_Texto", "Referência", "Frequência", "Freq_Unid", "Produto", "Origem",
        "Tipo", "Especificação", "Freq_Texto", "Laboratorio", "Resultado_Numerico", "Resultado_Texto",
        "Observação", "Aprovado"}) {
        @Override
        public boolean isCellEditable(int row, int col) {
            if (col == 30 || col == 31 || col == 32 || col == 33 ) {
                return true;
            } else {
                return false;
            }
        }
    };

Você recebe como parâmetro a linha e coluna a ser verificada.
Não sei como você alimenta seu TableModel, mas achei estranho você usar o DefaultTableModel, o ideal é especializar o AbstractTableModel para renderizar a sua coleção de objetos.

De qualquer forma, acho que o exemplo abaixo vai te ajudar:

DefaultTableModel modelo = new DefaultTableModel(null, new String[] {
	"ID",                  //  0
	"Ordem",               //  1
	"Linha",               //  2
	"Linha_Tipo",          //  3
	"Setor",               //  4
	"Perfil",              //  5
	"Bpcs",                //  6
	"Desc_Perfil",         //  7
	"Projeto",             //  8
	"OEM",                 //  9
	"Nº_Desenho",          // 10
	"Nº_Plano",            // 11
	"Operação",            // 12
	"Equipamento",         // 13
	"Desc_Teste",          // 14
	"Complemento",         // 15
	"Cod_Teste",           // 16
	"Espec_Min",           // 17
	"Espec_Max",           // 18
	"Espec_Unid",          // 19
	"Espec_Texto",         // 20
	"Referência",          // 21
	"Frequência",          // 22
	"Freq_Unid",           // 23
	"Produto",             // 24
	"Origem",              // 25
	"Tipo",                // 26
	"Especificação",       // 27
	"Freq_Texto",          // 28
	"Laboratorio",         // 29
	"Resultado_Numerico",  // 30
	"Resultado_Texto",     // 31
	"Observação",          // 32
	"Aprovado"}) {         // 33

	@Override
	public boolean isCellEditable(int linha, int coluna) {
		switch (coluna) {
			case 30:
			case 31:
				String tipo = (String) getValueAt(linha, 26);
				if (tipo != null) {
					switch (tipo) {
						case "Min e Max":
						case "No Min":
						case "No Max":
							return coluna == 30;
						case "Texto":
							return coluna == 31;
						default:
							return false;
					}
				}
				return false;
			case 32:
			case 33:
				return true;
			default:
				return false;
		}
	}
};

Boa noite Staroski!

Deu super certo cara!! não sei nem como agradecer, muito obrigado mesmo!!!

Obrigado novamente!

Você sabe me dizer como faço para colorir as colunas que ele bloqueou para pessoa ver que estão bloqueadas?

Usando TableCellRenderer, tem um exemplo aqui.

staroski , como faço para mostrar todas as linhas da minha jtable após filtrar ? consigo inserir na jtable mas não aparece porque o filtro não deixa , mesmo depois de dar new na query que faz o filtro

private void txt_busca_pessoaKeyReleased(java.awt.event.KeyEvent evt) {                                             
    String query = txt_busca_pessoa.getText().toUpperCase();
    if (!query.isEmpty()) {
        TableRowSorter<TablePessoa> tr = new TableRowSorter<>(tableModelPessoa);
        this.tbl_pessoa.setRowSorter(tr);
        tr.setRowFilter(RowFilter.regexFilter(query));
    } 

}