jTable

6 respostas
pedroroxd

Pessoal… trabalhei com DefaultTableModel quando fazia inserção de dados e tal, usando mysql…

Agora fui fazer um exemplo aqui sem banco de dados e me perdi! kkkkk

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) { strNome = tfNome.getText(); strRua = tfRua.getText(); //jTable1. //Adicionar dados a tabela... }
Como faço isso?
rs

6 Respostas

lina

Oi,

Isso depende se você utiliza um modelo para sua tabela ou não...

// Cria um modelo para sua tabela.
DefaultTableModel modelo = new DefaultTableModel();

// constrói a tabela
JTable tabela = new JTable(modelo);

// Cria as colunas,
modelo.addColumn("Nome"); 
modelo.addColumn("Rua");

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {                                           
     strNome = tfNome.getText();
     strRua = tfRua.getText();

     // Adiciona uma linha
     modelo.addRow(new Object[]{strNome, strRua});     
}

Tchauzin!

pedroroxd

Fiz assim:

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {                                           
        String strNome, strRua, strBairro,strCidade,strUf;

        strNome = tfNome.getText();
        strRua = tfRua.getText();
        strBairro = tfBairro.getText();
        strCidade = tfCidade.getText();
        strUf = (String) cbUf.getSelectedItem();

 DefaultTableModel modelo = new DefaultTableModel();
 modelo.addColumn("Nome");
 modelo.addColumn("Rua");
 modelo.addColumn("Bairro");
 modelo.addColumn("Cidade");
 modelo.addColumn("Uf");
 jTable1.setModel(modelo);
modelo.addRow(new Object[]{strNome, strRua,strBairro,strCidade,strUf});
}

Mas ae toda só a primeira vez que clica no botão funciona... Quando clico denovo, em vez de ele adicionar em outra linha, ele edita a que ta proxima

lina

Oi,

É porque você está sempre criando um modelo novo.
Esse modelo Deverá ser criado de forma global! junto com a criação de sua JTable.

Exatamente nessa sequencia:

// Definição das variaveis.
final DefaultTableModel modelo = new DefaultTableModel();
private JTable;

// Instancia a Jtable.
jTable1 = new JTable(modelo);
modelo.addColumn("Nome");
modelo.addColumn("Rua");
modelo.addColumn("Bairro");
modelo.addColumn("Cidade");
modelo.addColumn("Uf");

Depois, na ação do seu JButton, apenas faz:

private void btnIncluirActionPerformed(java.awt.event.ActionEvent evt) {                                           
     strNome = tfNome.getText();
     strRua = tfRua.getText();

     // Adiciona uma linha
     modelo.addRow(new Object[]{strNome, strRua, strBairro, strCidade, strUf});     
}

Tchauzin!

pedroroxd

lina…
Esse código:

final DefaultTableModel modelo = new DefaultTableModel(); jTable1 = new JTable(modelo); modelo.addColumn("Nome"); modelo.addColumn("Rua"); modelo.addColumn("Bairro"); modelo.addColumn("Cidade"); modelo.addColumn("Uf");
Eu coloco logo após o init components?

Se sim, depois quando eu vou dar o:

modelo.addRow(new Object[]{strNome, strRua, strBairro, strCidade, strUf});

Dá erro (o modelo fica sublinhado de vermelho)

lina

Oi,

Esse é o problema de usar NetBeans e arrastar botoezinhos!
Fazendo na "unha" você saberia onde colocar esse código ;)

Você cria a sua tabela em qual parte do código ???
Você deverá criar este modelo no mesmo lugar, vou postar um código pra ver se ajuda:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;

public class Estudos extends JFrame{
  public Estudos(){
    super("Exemplo de uma tabela simples");
		
    final DefaultTableModel modelo = new 
       DefaultTableModel();
    
    // constrói a tabela
    JTable tabela = new JTable(modelo);
    
    // Cria duas colunas
    modelo.addColumn("Nome");
    modelo.addColumn("Idade");
    
    JButton btn = new JButton("Adicionar Linhas");
    btn.addActionListener(
      new ActionListener(){
      	public void actionPerformed(ActionEvent e){
      	  String nome = JOptionPane.showInputDialog(
             null, "Informe o nome:");
      	  String idade = JOptionPane.showInputDialog(
             null, "Informe o nome:");
      	  
      	  // Adiciona uma linha
          modelo.addRow(new Object[]{nome, idade});
        }
      }	
    ); 
    
    tabela.setPreferredScrollableViewportSize(new 
        Dimension(350, 50));
	
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
			
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
    c.add(btn);
    	
    setSize(400, 300);
    setVisible(true);
  }
	
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Retirei isso de algum site, não me lembro qual.. porém ele explica direitinho como fazer!

Tchauzin!

pedroroxd

O problema é que tenho toda uma interface no frame…
Refaze-la sem arrastar como estou acostumado vai ser chato… rs

Eu entendi a lógica…
Só não sei como que funcionaria no meu caso (net beans, arrastando os componentes)
Não sei onde vou colocar aquela parte do código…

então vou criar outro tópico só dessa dúvida…
Vlws

Criado 30 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 6
Participantes 2