JTable

6 respostas
B

Fiz assim agora

Citação:

import java.awt.event.<em>;

import java.util.</em>;

import java.awt.<em>;

import java.sql.</em>;

import javax.swing.*;

public class TabelaCombo extends JFrame

{

Connection connection, conexao;

JTable tab;
public TabelaCombo()

{

setTitle(“Tabela”);

setSize(700,500);

String url = jdbc:odbc:MeuBanco;

try

{

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

connection = DriverManager.getConnection(url);
}

catch(ClassNotFoundException ex)

{

JOptionPane.showMessageDialog(null,“Driver JDBC_ODBC não encontrado!”);

}

catch(SQLException ex)

{

JOptionPane.showMessageDialog(null,“Problemas na conexão com a fonte de dados”);

}

buscaTabela(“SELECT * FROM tbveiculo”);

setSize(800,600);

show();

}

public void buscaTabela(String query)

{

Statement st;

ResultSet res;

try

{

st = connection.createStatement();

res = st.executeQuery(query);

displayresultset( res );

st.close();

}
catch (SQLException ex)

{

ex.printStackTrace();

}
}

public void displayresultset( ResultSet rs )

throws SQLException

{

//posiciona para o primeiro registro

boolean moreRecords = rs.next();

// se não houver registro manda menssagem

if (!moreRecords)

{

JOptionPane.showMessageDialog(null,Nao existe registro!);

setTitle(Filtro sem registro);

return;

}

setTitle(Filtro);

Vector columnHeads = new Vector();

Vector rows = new Vector();

try

{

//obtem titulos de coluna

ResultSetMetaData rsmd = rs.getMetaData();

for (int i=1; i <=rsmd.getColumnCount(); ++i)

columnHeads.addElement( rsmd.getColumnName(i));

// obtem dados das linhas

do

{

rows.addElement( getNextRow (rs, rsmd));

}

while(rs.next());

//exibe a tabela com os registro se houver
tab = new JTable(rows, columnHeads );

JScrollPane scroller = new JScrollPane(tab);

getContentPane().add(scroller, BorderLayout.CENTER);

validate();

}

catch (SQLException ex)

{

ex.printStackTrace();

}

}

public 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;

default:

System.out.println ("");

}

return currentRow;

}

public void shutDown()

{

try

{

connection.close();

}

catch(SQLException ex)

{

ex.printStackTrace();

}

}
public static void main(String args[])

{

final TabelaCombo app = new TabelaCombo();

app.addWindowListener(

new WindowAdapter() {

public void windowClosing(WindowEvent e)

{

app.shutDown();

System.exit(0);

}

}

);

}

}

Agora nesse outro arquivo abaixo chamei o TabelaCombo

Citação:

if(event.getSource()==micmt)

{

TabelaCombo tb = new TabelaCombo();

tb.buscaTabela(“SELECT *FROM tbmotorista”);

}

So que esta acontecendo o seguinte
ele mostra o registro do banco tbmotorista apaga e mostra o do
tbveiculo que está no TabelaCombo isso é em questao de milesimos de segundos…

QUer dizer o que eu fiz não resolveu nada…
Como faço ?

6 Respostas

danieldestro

Como vc faz oq?

B

danieldestro

nesse outro programa chamado MDIApplication

quando o usuario clicar no botao X
ele usa o programa TabelCombo
so que alter a query de consulta ao banco de dados
que seria essa
exemplo:
SELECT *FROM testando

danieldestro

Heim?

Tente ser o mais claro… fala o que vc quer fazer… o que fez… e o que espera que aconteça!

Pra eu poder te ajudar melhor.

valeu

B

O meu deus, eu fiz aquele programa TabelaCombo.java que serve para exibir os dados do banco de dados em uma grade!!
e no tabelacombo eu setei o valor da query de consulta
ao qual pega os dados

Certo, até aqui intenderãom ???

Agora aqui está o meu outro programa que chama-se MDIApplication.java

aqui nesse programa MDIApplication quero chamar o tabelaCombo,,
e alterar o campo de consulta sql, lá no tabela... está assim SELECT *FROM tbveiculo...

aqui nesse meu programa vai ter varias consulta tipo: relação motorista
relação de viagems:
relação de km rodados:

aqui quando clicar no botao relação motorista
ele chama o TabelaCombo e alterar a String query de consulta pela
SELECT *From motorista
exemplo:

if &#40;e.getSource&#40;&#41;==relação motorista&#41;
 &#123;
// aqui chama o TabelaCombo
    TabelaCombo tb = new TabelaCombo&#40;&#41;
//aqui eu altero o valor da query
   tb.buscaTabela&#40;&quot;SELECT *FROM motorista&quot;&#41;;
aqui é que esta o problema que eu não consig oalterar o valor direito
na hora que clico no botao
ele exibe os dados da tabela motorista
e apaga e mostra os dados da tabela tbveiculo &#40;que está setado no TabelaCombo&#41;
isso ocorre em torno de segundo  
ta vendo aqui que esta o problema
danieldestro

There you go, my friend!

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

public class TabelaCombo extends JFrame &#123;

	Connection connection, conexao;
	JTable tab;

	public TabelaCombo&#40;&#41; &#123;
		setTitle&#40;&quot;Tabela&quot;&#41;;
		setSize&#40;700,500&#41;;
		String url = &quot;jdbc&#58;odbc&#58;MeuBanco&quot;;
		try &#123;
			Class.forName&#40;&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;&#41;;
			connection = DriverManager.getConnection&#40;url&#41;;
		&#125; catch&#40;ClassNotFoundException ex&#41; &#123;
			JOptionPane.showMessageDialog&#40;null,&quot;Driver JDBC_ODBC não encontrado!&quot;&#41;;
		&#125; catch&#40;SQLException ex&#41; &#123;
			JOptionPane.showMessageDialog&#40;null,&quot;Problemas na conexão com a fonte de dados&quot;&#41;;
		&#125;

		buscaTabela&#40;&quot;SELECT * FROM tbveiculo&quot;&#41;;
		setSize&#40;800,600&#41;;
		show&#40;&#41;;
	&#125;

	public void buscaTabela&#40;String query&#41; &#123;
		Statement st;
		ResultSet res;
		try &#123;
			st = connection.createStatement&#40;&#41;;
			res = st.executeQuery&#40;query&#41;;
			displayresultset&#40; res &#41;;
			st.close&#40;&#41;;
		&#125;
		catch &#40;SQLException ex&#41; &#123;
			ex.printStackTrace&#40;&#41;;
		&#125;
	&#125;

	public void displayresultset&#40; ResultSet rs &#41; throws SQLException &#123;
		//posiciona para o primeiro registro
		boolean moreRecords = rs.next&#40;&#41;;
		// se não houver registro manda menssagem
		if &#40;!moreRecords&#41; &#123;
			JOptionPane.showMessageDialog&#40;null,&quot;Nao existe registro!&quot;&#41;;
			setTitle&#40;&quot;Filtro sem registro&quot;&#41;;
			return;
		&#125;
		setTitle&#40;&quot;Filtro&quot;&#41;;
		Vector columnHeads = new Vector&#40;&#41;;
		Vector rows = new Vector&#40;&#41;;
		try &#123;
			//obtem titulos de coluna
			ResultSetMetaData rsmd = rs.getMetaData&#40;&#41;;
			for &#40;int i=1; i &lt;=rsmd.getColumnCount&#40;&#41;; ++i&#41; &#123;
				columnHeads.addElement&#40; rsmd.getColumnName&#40;i&#41;&#41;;
			&#125;
			// obtem dados das linhas
			do &#123;
				rows.addElement&#40;getNextRow&#40;rs, rsmd&#41;&#41;;
			&#125; while&#40;rs.next&#40;&#41;&#41;;
			//exibe a tabela com os registro se houver
			tab = new JTable&#40;rows, columnHeads&#41;;
			JScrollPane scroller = new JScrollPane&#40;tab&#41;;
			getContentPane&#40;&#41;.removeAll&#40;&#41;;
			getContentPane&#40;&#41;.add&#40;scroller, BorderLayout.CENTER&#41;;
			validate&#40;&#41;;
		&#125; catch &#40;SQLException ex&#41; &#123;
			ex.printStackTrace&#40;&#41;;
		&#125;
	&#125;

	public Vector getNextRow&#40; ResultSet rs, ResultSetMetaData rsmd&#41; throws SQLException &#123;
		Vector currentRow = new Vector&#40;&#41;;
		for&#40; int i =1; i&lt;= rsmd.getColumnCount&#40;&#41;; ++i&#41;
			switch&#40;rsmd.getColumnType&#40;i&#41;&#41; &#123;
				case Types.VARCHAR&#58;
					currentRow.addElement&#40; rs.getString&#40;i&#41;&#41;;
					break;
				case Types.INTEGER&#58;
					currentRow.addElement&#40; new Long&#40; rs.getLong&#40;i&#41;&#41;&#41;;
					break;
				default&#58;
					System.out.println&#40;&quot;&quot;&#41;;
			&#125;
		return currentRow;
	&#125;

	public void shutDown&#40;&#41; &#123;
		try &#123; connection.close&#40;&#41;; &#125;
		catch&#40;SQLException ex&#41; &#123; ex.printStackTrace&#40;&#41;; &#125;
	&#125;

	public static void main&#40;String args&#91;&#93;&#41; &#123;
		final TabelaCombo app = new TabelaCombo&#40;&#41;;
		app.addWindowListener&#40; new WindowAdapter&#40;&#41; &#123;
			public void windowClosing&#40;WindowEvent e&#41; &#123;
				app.shutDown&#40;&#41;;
				System.exit&#40;0&#41;;
			&#125;
		&#125; &#41;;
		try &#123;
			Thread.sleep&#40;15000&#41;;
		&#125; catch&#40;Exception e&#41; &#123;&#125;
		app.buscaTabela&#40;&quot;SELECT * FROM tbteste&quot;&#41;;
	&#125;
&#125;

Faltou você remover o jtable atual antes de adicionar o novo.

getContentPane().removeAll();

B

Felizmente eu ja com segui resolver o problema
a unica coisa que eu fiz foi tirar o metodo
buscaTabela("Select *from tbveiculo);

A unica coisa agora que eu preciso é
aumentar as escritas, largura da linha, e colocar barra de rolagem
em baixo , so tem barar de rolagem laterar.

Criado 16 de julho de 2004
Ultima resposta 21 de jul. de 2004
Respostas 6
Participantes 2