Como selecionar uma linha em uma JTable, sem que os valores sejam alterados

3 respostas
M

Estou com um problema que precisa ser solucionado o mais rápido possível. O problema é que eu estou desenvolvendo um programinha que utiliza uma técnica de IA. O usuário entra com os dados que são comparados com o banco de dados de Doenças de Soja e informa, em uma JTable, os valores mais parecidos com as informações contidas nos JComboBox na tela. Porém, após a pesquisa, quando tento selecionar uma linha na tabela, os seus valores são zerados. Como eu posso fazer para que esses dados não sejam alterados? A seguir, uma parte do código-fonte. Se alguém puder me ajudar, eu fico muito agradecido pela atenção.

public void getTableAtrib()

{	

ResultSet result;
try
	{	
		
		PreparedStatement ps=connection.prepareStatement(
	    "SELECT Cod_case as CASO, Cod_doenca as DOENÇA, Desc_doenca as DESCRIÇÃO, PercAtribVal as SIMILARIDADE, CONFIABILIDADE "+
	    "FROM MelhoresCasos "+
		"ORDER BY PercAtribVal DESC");
		 
		result= ps.executeQuery();							 
    		    	
		displayResultSet (result);
	}
	catch (SQLException ex)
	{
		JOptionPane.showMessageDialog(null, "Erro2: "+ex);
	}
}

public void getTableDisc()
{	
	ResultSet result;
	
	try
	{	
		
		PreparedStatement ps=connection.prepareStatement(
	    "SELECT Cod_case as CASO, Cod_doenca as DOENÇA, Desc_doenca as DESCRIÇÃO, PercDiscVal as SIMILARIDADE, CONFIABILIDADE "+
	    "FROM MelhoresCasos "+
		"ORDER BY PercDiscVal DESC");
		 
		result= ps.executeQuery();							 
    		    	
		displayResultSet (result);
	}
	catch (SQLException ex)
	{
		JOptionPane.showMessageDialog(null, "Erro2: "+ex);
	}
}

public void displayResultSet (ResultSet r) throws SQLException
{
		boolean moreRecords = r.next ();
		
		if (! moreRecords)
		{
			JOptionPane.showMessageDialog(this, "Registro inválido");
			setTitle ("Registros Vazios");
			return;
		}
		
		Vector columnHeads= new Vector ();
		Vector rows= new Vector (); 
		int k=1;
		
		try
		{
			ResultSetMetaData rsmd= r.getMetaData();
			for (int i=1; i<=rsmd.getColumnCount(); i++)
			{
				columnHeads.addElement(rsmd.getColumnName(i));
			}
		
			do
			{
				rows.addElement (getNextRow (r, rsmd));
				if (k++==5)
					break;
			} while (r.next ());
			
			table= new JTable (rows, columnHeads);
			JScrollPane scroll= new JScrollPane (table);
			panel3.add (scroll, BorderLayout.CENTER);
			validate ();
		}
	catch (SQLException ex)
	{
		ex.printStackTrace();
	}
}

private Vector getNextRow (ResultSet r, ResultSetMetaData rsmd)
throws SQLException
{
	Vector currentRow= new Vector ();
	
	for (int i=1; i<=rsmd.getColumnCount();i++)
	{
		switch(rsmd.getColumnType(i))
		{
			case Types.VARCHAR:
			currentRow.addElement (r.getString(i));
			break;
			
			case Types.INTEGER:
			currentRow.addElement(new Integer (r.getInt(i)));
			break;
			
			case Types.DOUBLE:
			currentRow.addElement(formato.format(new Double (r.getDouble(i))));
			break;
			
			default:
			System.out.println("Tipo dos dados: "+
			rsmd.getColumnTypeName(i));
		}
	}
	
	return currentRow;
}

3 Respostas

keller

cara apos a consulta vc poderia dar um setEditable(false); na tabela
e caso o usuario queira alterar clique em um botão ou checkbox que faça um action de setEditable(true) bom foi isso que eu consegui de urgencia :slight_smile:

*apos a facul e um dia todo de trabalho.

hmichel

Cara, você terá que sobrescrever o método isCellEditable( int, int ) do model da tabela. Este método retorna se uma determinada linha/coluna é editável ou não. Assim você pode estar controlando estas propriedades a bom gosto.

M

Agradeço pela ajuda de vcs. Foi de muita importância as informações que vcs me passaram.

Valeu

Criado 25 de novembro de 2004
Ultima resposta 26 de nov. de 2004
Respostas 3
Participantes 3