Mais uma de JTable

6 respostas
C

Oi povo do GUJ!!!!.
Fiz uma aplicação que está puxando consultas de um BD via JTable.
Agora no panel em que está a tabela, coloquei dois botões: "alterar" e "excluir".
Eu preciso que quando o usuário clicar com mouse em uma linha da JTable selecionando-a e depois clicar em excluir, seja deletada a linha do JTable e o registro do BD correspondente.
Como eu faço isso ?
Coloco aqui meu código:

package Teste; 

import java.sql.*; 
import java.awt.*; 
import javax.swing.*; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;


/**
* This code was generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* *************************************
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED
* for this machine, so Jigloo or this code cannot be used legally
* for any corporate or commercial purpose.
* *************************************
*/
public class TableDisplay extends JPanel { 
private Connection connection; 
private JTable table; 
private JButton jButton2;
private JButton jButton1;

public TableDisplay() { 
super(); 





try { 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
connection = DriverManager.getConnection("jdbc:odbc:BancodeDados", "", ""); 
} 
catch (ClassNotFoundException cnfex) { 
System.err.println( 
"Falhou a conexao com o banco"); 
cnfex.printStackTrace(); 
System.exit(1); 
} 
catch (SQLException sqlex) { 
System.err.println("Conexao desabilitada"); 
sqlex.printStackTrace(); 
} 

getTable(); 
this.setSize(450, 370); 
setLocation(5,20); 
this.setPreferredSize(new java.awt.Dimension(450, 414));
show(); 
} 

private void getTable() 
{ 
Statement statement; 
ResultSet resultset; 

try { 
String query = "Select idobra,nome,localdearmazenamento from obra"; 
statement = connection.createStatement(); 
resultset = statement.executeQuery(query); 
displayResultSet(resultset); 
statement.close(); 
} 
catch ( SQLException sqlex ) { 
sqlex.printStackTrace(); 
} 
} 

private void displayResultSet(ResultSet rs ) 
throws SQLException 
{ 
boolean moreRecords = rs.next(); 

if (! moreRecords) { 
JOptionPane.showMessageDialog(this, "Nao existem registros na tabela!!"); 
//setTitle(); 
return; 
} 

// setTitle("Listagem Geral dos dados - Tabela Student - bancoDB"); 

Vector columnHeads = new Vector(); 
Vector rows = new Vector(); 

try { 
ResultSetMetaData rsmd = rs.getMetaData(); 
for (int i = 1; i <= rsmd.getColumnCount(); ++i) 
columnHeads.addElement(rsmd.getColumnName(i)); 

do { 
rows.addElement(getNextRow(rs, rsmd)); 
} while (rs.next()); 

table = new JTable(rows, columnHeads); 
JScrollPane scroller = new JScrollPane(table); 
add(scroller,BorderLayout.CENTER); 
scroller.setPreferredSize(new java.awt.Dimension(446, 234));
	{
		jButton1 = new JButton();
		this.add(jButton1);
		jButton1.setText("alterar");
	}
	{
		jButton2 = new JButton();
		this.add(jButton2);
		jButton2.setText("excluir");
		jButton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				table.clearSelection() ;
				System.out.println("jButton2.actionPerformed, event=" + evt);
				//TODO add your code for jButton2.actionPerformed
			}
		});
	}
validate(); 
} 
catch (SQLException sqlex) { 
sqlex.printStackTrace(); 
} 
} 

private Vector getNextRow( ResultSet rs, 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(rs.getString(i)); 
break; 
case Types.INTEGER:currentRow.addElement(new Long(rs.getLong(i))); 
break; 
/*case Types.LONGCHAR:currentRow.addElement(rs.getString(i)); 
break;*/ 
default: System.out.println("Tipo dos Dados: " + rsmd.getColumnTypeName(i)); 
} 
return currentRow; 
} 

public void shutDown() 
{ 
try { 
connection.close(); 
} 
catch (SQLException sqlex) { 
System.err.println("N? foi poss?el desconectar."); 
sqlex.printStackTrace(); 
} 
} 
public static void main(String[] args) {
	JFrame frame = new JFrame();
	frame.getContentPane().add(new TableDisplay());
	frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	frame.pack();
	frame.show();
}

	/**
	* Auto-generated method for setting the popup menu for a component
	*/
private void setComponentPopupMenu(final java.awt.Component parent, final javax.swing.JPopupMenu menu) {
parent.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent e) {
if(e.isPopupTrigger())
menu.show(parent, e.getX(), e.getY());
}
public void mouseReleased(java.awt.event.MouseEvent e) {
if(e.isPopupTrigger())
menu.show(parent, e.getX(), e.getY());
}
});
	}
}

6 Respostas

dyorgio

crie um FocusListener para a sua Jtable…gardando no onFocusLost o
indice da linha a ser excluida…
assim no actionListener do seu botão vc terá uma referencia…
ultilize o indice no método que pega a linha inteira da Jtable…
recolha a sua master key e faça a sua query!!!
[]'s dyorgio

C

Olá dyorgio.
Obrigado por responder.
O que seria Masterkey ?
Você por acaso tem um exemplo de como guardar o índice da linha ?
Abraço.
Charles

C
int linhTabela=tuaTabela.getSelectedRow()
C

Mais uma coisa, não misture o teu modelo com a camada de apresentação.

Dá uma procurada no fórum por AbstractTableModel e dah uma lida no tutorial sobre Jtable tb.

Tutorial

http://www.guj.com.br/java.tutorial.artigo.140.1.guj

http://www.guj.com.br/java.tutorial.artigo.147.1.guj

Exemplo de Modelo pra tua tabela

C

Fantástico!!!
Agora como eu passo isso para a Listener do botão!!!

dyorgio

desculpe…usei a palavra errada…
masterkey = primary key…
é aquele indice unico da tabela…
[]'s dyorgio

Criado 23 de junho de 2005
Ultima resposta 27 de jun. de 2005
Respostas 6
Participantes 3