Jtable e Mysql

5 respostas
T

Boa tarde pessoal, to iniciando em java e tive a ideia de fazer esse programa, mas estou tendo essa dificuldade, se alguem puder me ajudar...

Eu quero criar uma classe na qual será responsavel pela consulta.
a minha ideia é ter 2 combo box.
o 1º seria a tabela que o usuario quer pesquisar. e o 2º é um item que tem nessa tabela e será o "indice" da consulta.
Por exemplo:
tem a tabela funcionario e nela ele pode escolher procurar por nome, cpf, etc... e entao mais a frente tem o JTextField que ele digitará o que ele está procurando.

Feito isso, ele terá uma Jtable onde todos os dados puxados do mysql serão jogados. Nessa Jtable as ultimas duas colunas serão: Visualizar (onde ele visualizará todos os dados inserido sobre o que ele buscou) e excluir (que excluirá os dados respectivos)

Agora vai o problema:
Como colocar esse botoes na Jtable?
e como fazer para ele puxar os dados do mysql depois de clicados?

Segue o código TESTE que eu fiz da tabela. e seguinte o codigo que eu ja fiz do programa mas nao tá com a Jtable ainda, está apenas fazendo a consulta.

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.text.NumberFormat;
import java.util.EventObject;

import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;


public class tabela_teste extends Interface{
	
	
	JTable tabela;
DefaultTableModel dtm;
	JButton teste;
	JPanel p1;
	
	public tabela_teste()
	{
	
		p1 = new JPanel();
		p1.setLayout(null);
		p1.setBounds(10,20,500,200);
		
		 String[] colNames = new String[] { "teste", "aaa", "bbbb", "teste3" };   
		    
		 final String[][] table = {{"","","",""}};   	
		
	      
	      
	         dtm = new DefaultTableModel(table, colNames) {
	            public Class getColumnClass(int col) {
	                return table[0][col].getClass();
	            }
	        };
	        
	        JTable tabela = new JTable(dtm);
	        TableColumnModel colModel = tabela.getColumnModel();
	        colModel.getColumn(3).setCellRenderer(new ButtonRenderer());
	        colModel.getColumn(3).setCellEditor(new ButtonEditor(tabela));
		
	        JScrollPane scroll = new JScrollPane(tabela);
	        scroll.setBounds(10,20,450,100);
	      
	       p1.add(scroll);
	       
	      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
	      
	      getContentPane().add(p1); 
	     // getContentPane().add(teste); 
	      
	        setVisible(true);
		
	}
	
	
class ButtonEditor extends AbstractCellEditor implements TableCellEditor,
    ActionListener {
JTable table;
JButton button = new JButton();
NumberFormat nf = NumberFormat.getCurrencyInstance();
int clickCountToStart = 1;

public ButtonEditor(JTable table) {
this.table = table;
button.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {


int a = table.getSelectedRow();


JOptionPane.showMessageDialog(null,"teste"+a );


}

	public Component getTableCellEditorComponent(JTable table,
            Object value,
            boolean isSelected,
            int row, int column) {
button.setText("Visualizar");
return button;
}

public Object getCellEditorValue() {
return button.getText();
}

public boolean isCellEditable(EventObject anEvent) {
if(anEvent instanceof MouseEvent) { 
return ((MouseEvent)anEvent).getClickCount() >= clickCountToStart;
}
return true;
}

public boolean shouldSelectCell(EventObject anEvent) {
return true;
}

public boolean stopCellEditing() {
return super.stopCellEditing();
}

public void cancelCellEditing() {
super.cancelCellEditing();
}
}

public static void main (String args[])
{
	
	
	tabela_teste f = new tabela_teste();
	for (int i=0;i<=1000;i++)
	 f.inserirlinha();
	
	
}

public void inserirlinha()
{
	
	String a="teste1",b="teste2",c="teste3";			
	   
		dtm.addRow(new String [] {a,b,c,"Visualizar"});
	//	tabela.setModel(dtm);
		
	//	te3.setCellEditor(new DefaultCellEditor(comboBox));

		
		
}

public void actionPerformed(ActionEvent e) {
	if(e.getSource()==teste)
	{			
		inserirlinha();
	}

}
}

class ButtonRenderer implements TableCellRenderer {
    JButton button = new JButton("Visualizar");

    public Component getTableCellRendererComponent(JTable table,
                                                   Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus,
                                                   int row, int column) {
    
        return button;
    }
}

Nesse primeiro codigo, se voces compilarem, verão que ja carrega com a primeira linha, mas eu nao quero essa primeira linha aparecendo, eu quero que carregue apenas depois de ser feita a consulta. como posso tira-la?

package programa;
//import ButtonRenderer;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;


public class Consultar extends Interface implements ActionListener{
	
	JComboBox CombTabela, CombComputador,CombImpressora, CombOcorrencia, CombNextel, CombEvento ;
	JTextField txConsult;
	JButton BtConsultar;
	String strTabela="", strCondicao=""; 
	JLabel LConsult;
	int Counter;
	
	//bd
	private Connection conexao;
	private Statement meuState;
	private ResultSet rs;

	//tabela
	JTable tabela;
	DefaultTableModel dtm;
		JButton teste;
		JPanel p1;
	
	public Consultar()
	{
		p1 = new JPanel();
		p1.setLayout(null);
		p1.setBounds(30,120,700,300);
		
		 String[] colNames = new String[] { "teste", "aaa", "bbbb", "teste3" };   
		    
		 final String[][] table = {{"","","",""}};   	
		
	      
	      
	         dtm = new DefaultTableModel(table, colNames) {
	            public Class getColumnClass(int col) {
	                return table[0][col].getClass();
	            }
	        };
	        
	        JTable tabela = new JTable(dtm);
	        TableColumnModel colModel = tabela.getColumnModel();
	  //      colModel.getColumn(3).setCellRenderer(new ButtonRenderer());
	  //      colModel.getColumn(3).setCellEditor(new ButtonEditor(tabela));
		
	        JScrollPane scroll = new JScrollPane(tabela);
	        scroll.setBounds(10,20,600,280);
	      
	       p1.add(scroll);
	       
	      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
	      
	      getContentPane().add(p1); 
	     // getContentPane().add(teste); 
	      
	        setVisible(true);
		
	
	
		
		LConsult= new JLabel("Consultar");
		LConsult.setBounds(250,20,150,20);
		
		BtConsultar= new JButton ("Consultar");
		BtConsultar.setBounds(450,100,90,20);
		BtConsultar.addActionListener(this);
		
		txConsult= new JTextField();
		txConsult.setBounds(450,70,150,20);
		
		
		CombTabela = new JComboBox();
		CombTabela.addItem(" Computador");
		CombTabela.addItem(" Impressora");
		CombTabela.addItem(" Ocorrência");
		CombTabela.addItem(" Nextel");
		CombTabela.addItem(" Evento");
		CombTabela.setBounds(35,70,120,20);
		CombTabela.setSelectedIndex(-1);
		CombTabela.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=0;
				Counter++;
			  switch(CombTabela.getSelectedIndex())
			  {
			   
			  case 0:{   
				  
				  strTabela="Computador";
				  
				    CombComputador.setVisible(true);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strTabela="Impressora";
				   CombComputador.setVisible(false);
					CombImpressora.setVisible(true) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 2 :{
				  
				  strTabela="Ocorrencia";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(true);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 3 :{
				  
				  strTabela="Nextel";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(true) ;
					CombEvento.setVisible(false);
			  
			   break;
			  }	
			  case 4 :{
	  
				  strTabela="Evento";
				  CombComputador.setVisible(false);
					CombImpressora.setVisible(false) ;
					CombOcorrencia.setVisible(false);
					CombNextel.setVisible(false) ;
					CombEvento.setVisible(true);
  
				  break;
			  }
		}
			  }
		});
		
		
		CombComputador= new JComboBox();
		CombComputador.setVisible(false);
		CombComputador.addItem(" Nome do PC");
		CombComputador.addItem(" Usuario");
		CombComputador.addItem(" Configuração do PC");
		CombComputador.addItem(" Setor");
		CombComputador.addItem(" Proprietário");
		CombComputador.setBounds(215,70,150,20);
		CombComputador.setSelectedIndex(-1);
		CombComputador.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
				
			  switch(CombComputador.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome do PC";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Usuario";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Configuração do PC";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Proprietario";
			  
			   break;
			  }
		}
			  }
		});
		
		
		CombImpressora = new JComboBox();
		CombImpressora.setVisible(false);
		CombImpressora.addItem(" Marca");
		CombImpressora.addItem(" Modelo");
		CombImpressora.addItem(" IP");			
		CombImpressora.addItem(" Setor");	
		CombImpressora.setBounds(215,70,150,20);
		CombImpressora.setSelectedIndex(-1);
		CombImpressora.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombComputador.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Marca";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="IP";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }
			  }
			  }});
		
		CombOcorrencia = new JComboBox();
		CombOcorrencia.setVisible(false);
		CombOcorrencia.addItem(" Usuario");
		CombOcorrencia.addItem(" Setor");
		CombOcorrencia.addItem(" Data do Problema");
		CombOcorrencia.addItem(" Data da Resolução");
		CombOcorrencia.addItem(" Situação");
		CombOcorrencia.setBounds(215,70,150,20);
		CombOcorrencia.setSelectedIndex(-1);
		CombOcorrencia.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombOcorrencia.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Usuario";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Data do Problema";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Data da Resolução";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Situação";
			  
			   break;
			  }
		}
			  }
		});
		
		
		CombNextel = new JComboBox();
		CombNextel.setVisible(false);
		CombNextel.addItem(" Nome");		
		CombNextel.addItem(" Setor");
		CombNextel.addItem(" Unidade");
		CombNextel.addItem(" Modelo");
		CombNextel.addItem(" Número");
		CombNextel.addItem(" Status");
		CombNextel.setBounds(215,70,150,20);
		CombNextel.setSelectedIndex(-1);
		CombNextel.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombNextel.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Unidade";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }
			  case 4 :{
				  
				  strCondicao="Número";
			  
			   break;
			  }
			  case 5 :{
				  
				  strCondicao="Número";
			  
			   break;
			  }
		}}});
		
		
		CombEvento= new JComboBox();
		CombEvento.setVisible(false);
		CombEvento.addItem(" Titulo");
		CombEvento.addItem(" Data");
		CombEvento.addItem(" Status");
		CombEvento.setBounds(215,70,150,20);
		CombEvento.setSelectedIndex(-1);
		CombEvento.addItemListener(new ItemListener(){
			
			public void itemStateChanged(ItemEvent e) 
			  {
				Counter=1;
				Counter++;
			  switch(CombEvento.getSelectedIndex())
			  {
			  
			  case 0:{   
				  
				  strCondicao="Nome";
				 
			   break;
			  }
			  
			  case 1 :{
				  
				  strCondicao="Setor";
			  
			   break;
			  }	
			  case 2 :{
				  
				  strCondicao="Unidade";
			  
			   break;
			  }
			  case 3 :{
				  
				  strCondicao="Modelo";
			  
			   break;
			  }
			  }}});
		
		getContentPane().add(LConsult);
		getContentPane().add(txConsult);
		getContentPane().add(BtConsultar);
		getContentPane().add(CombTabela);
		getContentPane().add(CombComputador);
		getContentPane().add(CombImpressora);
		getContentPane().add(CombOcorrencia);
		getContentPane().add(CombNextel);
		getContentPane().add(CombEvento);
		

		
		
			
		
		
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==BtConsultar)
		{
			try
	    	{  
							
	    		Class.forName("com.mysql.jdbc.Driver");  
	    		conexao = DriverManager.getConnection("jdbc:mysql://localhost/prol", "root", "");  
	    		   
	    		meuState = conexao.createStatement();
	    		
	    		
	    		rs = meuState.executeQuery("select titulo, data, status from evento where status = '"+txConsult.getText()+"';");
	    		
	    		
	    		
	    		String titulo="",data="",status="";
	    		while (rs.next()){
	    			titulo = (rs.getString("titulo"));
	    			data = (rs.getString("data"));
	    			status = (rs.getString("status"));
	    		 				
	    			
	    		}
	    		try {
					 
	    			conexao.close();
					 
					} catch (SQLException ex) {
					
					 System.out.println("Não foi possível fechar a conexão!");
					 }
	    		
	    	}
	    	catch(ClassNotFoundException ex)
	        {
	            System.out.println("Driver JDBC-ODBC não encontrado!");
	        }
	        catch(SQLException ex)
	        {
	            System.out.println("Problemas na conexao com a fonte de dados");
	        }  
	    	

		}
	 }
	
	
	
	public static void main (String args[])
	{
		
		new Consultar();
	}
}

Se alguem puder me ajudar, obrigado, e ajudar a melhor o codigo em geral.

5 Respostas

guilherme.dio

Da uma olhada nesse tópico aqui: http://www.guj.com.br/java/246143-ordenar-e-incluir-imagem-no-jtable-resolvido/1

Acredito que possa te ajudar em sua dúvida,

Att. Guilherme Dio.

R

Opa, boa tarde

é o seguinte, eu sou iniciante também… mas tenta mudar a linha 38 ai pelo seguinte:

final Object[][] table =new Object [][]{};

se eu tiver falando asneira me avisa. :smiley:

ViniGodoy

Tópico movido para o fórum de interface gráfica.

Por favor, leia com atenção a descrição dos fóruns antes de postar.

T

Primeiramente desculpe-me por postar no lugar errado, realmente fiquei com duvida entre postar em interface grafica e java basico.

Guilherme, no link que voce postou, se nao estou enganado ele está mostrando como inserir um valor na jtable direto do banco de dados, eu ainda nao tentei isso, mas acredito que eu consiga fazer, meu problema maior é com o botao dentro do Jtable.

rspricigo, eu ja havia tentado o que vc falou. Em uma outra tabela que eu tenho sem adicionar botoes, funciona normalmente, mas com essa tabela que eu insiro o botao dá erro: Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 0 pq ele tenta carregar o botao logo de cara na jtable.

T

Bom, acho que colocar o botao fora da Jtable será mais inteligente e mais facil. Faço a Jtable normalmente e quando clicar no botao “alterar” ou “excluir” ele usa o metodo “x.getSelectedRow()” e a partir dai eu faço o que iria fazer.

Essa classe de consulta nao terá um numero fixo de linhas e colunas, por exemplo: se eu for buscar um Evento eu preciso saber apenas o “titulo” e a “data”, mas se eu for buscar uma Impressora eu preciso saber por exemplo a “marca, modelo, ip, e setor”. seria possivel colocar mais uma coluna numa jtable depois de criar a mesma?

Outra duvida mas que nao tem nada a ver com as anteriores. só por curiosidade…
Pra que serve “frame.pack()”?

valeu.


Acrescentando mais uma duvida que me surgiu agora, eu faria o JtableModel na classe que que será usada pra consultar ou faria uma outra classe e apenas mostraria junto a classe que será feito a consulta? (deu pra entender)?
Se alguem puder me dar uma luz, seria mto bom.

Criado 6 de julho de 2011
Ultima resposta 7 de jul. de 2011
Respostas 5
Participantes 4