Re:JTable - Essa é difícil

3 respostas
T

Tu parece tá perdido… Os JTextFields tão recebendo o mesmo valor, o da célula selecionada, quando deviam tá recebendo o valor de cada coluna da linha selecionada.

E não seria

bv.add(rs.getString(a)+"");

?

3 Respostas

rick_gallagher

Esse topico ajudou muito… tava com esse problema!

:slight_smile:

D
Quem puder ajudar... Eu tenho um JTable com 3 colunas que faz um select no banco de dados:
TableModel model = new DefaultTableModel(body, head);
	final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);

	private void Table()throws Exception {
		try {
			rs = stmt.executeQuery("select cod_fiscal, empresa, fil_cod  from f_natur");
			rsmd = rs.getMetaData();
			int col  = rsmd.getColumnCount();
			while(rs.next()) {
				bv = new Vector<String>();
				int a;
				for(a=1;a<=col;a++) {
					if(flag) {
						head.add(rsmd.getColumnName(a));
					}
					bv.add(rs.getString(a).toString()+"");
				}
				body.add(bv);
				flag=false;
				}
			rs.close();
			stmt.close();
			con.close();
		}
		catch(Exception exec) {
			JOptionPane.showMessageDialog(null, "Problemas na tabela.", "Erro", JOptionPane.ERROR_MESSAGE);
			exec.printStackTrace();
		}
		jTable = new JTable(body, head);
		jTable.setLocation(new Point(15, 118));
		jTable.setBackground(new Color(204, 204, 204));
		jTable.setAutoscrolls(true);
		jTable.setSize(new Dimension(200, 200));
		jTable.setModel(model);
		jTable.setRowSorter(sorter);
		jTable.setSize(new Dimension(200, 200));
		jTable.addMouseListener(this);
Quando clicar em alguma linha da tabela, os JTextField's 1,2 e 3 pegam os valores:
public void mouseClicked(MouseEvent e) {
		if (e.getClickCount() >= 0) {
			int row = jTable.getSelectedRow();
			int column = jTable.getSelectedColumn();
			Object o = jTable.getValueAt(row, column);
			String value = "";
			if (o != null) {
				value = o.toString();
			}
			jTextField1.setText(value);
                        jTextField2.setText(value);
                        jTextField3.setText(value);
		}
	}
Dessa forma não dá certo porque se eu clicar em qualquer linha os JTextField's vão pegar os mesmos resultados.

Eu queria o seguinte: quando clicar em qualquer linha, o JTextField1 pegue o valor da coluna1, o JTextField2 pegue o valor da coluna2 e o JTextField3 pegue o valor da coluna3, da mesma linha.

Por exemplo:
Eu tenho três colunas
[cod_fiscal, empresa, fil_cod]

Para a coluna cod_fiscal eu tenho 3 linhas
[linha1col1, linha1col2, linha1col3]

Para a coluna empresa eu tenho 3 linhas
[linha2col1, linha2col2, linha2col3]

Para a coluna fil_cod eu tenho 3 linhas
[linha3col1, linha3col2, linha3col3]

cod_fiscal+++empresa+++fil_cod
-linha1col1-----linha1col2---linha1col3
-linha2col1-----linha2col2---linha2col3
-linha3col1-----linha3col2---linha3col3
...

Se eu clicar na linha 1, da coluna 1 (linha1col1) deverá aparecer no JTextField1 linha1col1, no JTextField2 linha1col2 e no JTextField3 linha1col3

Se eu clicar na linha 3 da coluna 2 (linha3col2) deverá aparecer no JTextField1 linha3col1, no JTextField2 linha3col2 e no JTextField3 linha3col3...
Resumindo, os JTextField's devem pegar os valores de todas linhas, independente da coluna, se é clicado na linha 2 da coluna 3, os JTextField's devem pegar todos os valores, a começar pela primeira linda coluna...

Ah, as linhas vêem do banco de dados...

Bom, espero não ter complicado muito....

Obrigado

D
Consegui assim:
public void mouseClicked(MouseEvent e) {
		if (e.getClickCount() >= 0) {
		      if (e.getClickCount() >= 0) {
		          int row = jTable.getSelectedRow();

		          jTextField1.setText((String) jTable.getValueAt(row,0));
		          jTextField2.setText((String) jTable.getValueAt(row,1));
		          jTextField3.setText((String) jTable.getValueAt(row,2));
		       }
		    }
	}
Valeu
Criado 21 de maio de 2006
Ultima resposta 22 de mai. de 2006
Respostas 3
Participantes 3