Inserir Linhas no JTable

14 respostas
J

Ola…
Li vários tópicos aqui no GUJ, mas não consegui compreender com clareza como inserir uma linha no JTable, abaixo esta minha classe com o método criado e o método que insere a linha, será que alguém me ajudar a resolver este problema?

public class exemplo extends JFrame implements ActionListener {

public exemplo() {

Container cp = getContentPane();

JPanel p2 = new JPanel(new FlowLayout());

final DefaultTableModel Conteudo = new DefaultTableModel();
JTable t = new JTable(Conteudo);   
    Conteudo.addColumn("Placa"); Conteudo.addColumn("Data");   
    
    t.setPreferredScrollableViewportSize(new Dimension(600, 400)); 
    JScrollPane s = new JScrollPane(t);
    p2.setLayout(new BorderLayout());   
    p2.add(s,BorderLayout.CENTER);           
    cp.add("Center", p2);             
}

public void InserirLinha(String Placa, String Data){
    // Adicionar linhas na JTable 
       
}

public void actionPerformed(ActionEvent e) {
    throw new UnsupportedOperationException("Not supported yet.");
}

 public static void main(String args[]){ 
      
      exemplo inicio = new exemplo();
      inicio.setVisible(true);  
      
}

}

valew

14 Respostas

L

já leu este.
http://www.guj.com.br/posts/list/3727.java
,
http://www.guj.com.br/posts/list/53854.java
e este.
http://imasters.uol.com.br/artigo/2103/java/exemplo_facil_de_jtable/

abraço.

J

pois é…

Aparentemente é fácil, só que todos os exemplos que vi ele preenche a JTable de uma só vez, mais o que preciso é que sempre que o método InserirLinha for chamado ele insira uma nova linha, é isso que eu não estou conseguindo fazer.

T

primeiro vc tem que criar uma variavel para receber o tableModel.

Depois vc só precisa fazer esse método que vc quer usar adicionar linhas usando o tableModel. Exemplo:
JTable t = new JTable(Conteudo);
Conteudo.addColumn("Placa"); Conteudo.addColumn("Data"); 
DefaultTableModel modelo = (DefaultTableModel) t.getModel();

.
.
.

public void InserirLinha(String Placa, String Data){
        // Adiciona uma linha vazia na JTable
        modelo.addRow(new Object[]{null,null});
}

Espero ter ajudado.

Falows

J

pois é… muito estranho fiz o pedido e não funcionou… abaixo esta o que fiz:

public class exemplo extends JFrame implements ActionListener {
private DefaultTableModel modelo;

public exemplo() { 
    Container cp = getContentPane(); 
    JPanel p2 = new JPanel(new FlowLayout()); 
    
    final DefaultTableModel conteudo = new DefaultTableModel(); 

    JTable t = new JTable(conteudo); 
    conteudo.addColumn("Placa"); conteudo.addColumn("Data"); 
    DefaultTableModel modelo = (DefaultTableModel) t.getModel();   

    t.setPreferredScrollableViewportSize(new Dimension(600, 400)); 
    JScrollPane s = new JScrollPane(t); 
    p2.setLayout(new BorderLayout()); 
    p2.add(s,BorderLayout.CENTER); 
    cp.add("Center", p2); 
    InserirLinha("a", "b");

}

public void InserirLinha(String Placa, String Data){ 
    // Adicionar linhas na JTable 
         modelo.addRow(new Object[]{null,null});

}

public void actionPerformed(ActionEvent e) { 
        throw new UnsupportedOperationException("Not supported yet.");

}

public static void main(String args[]){ 

        exemplo inicio = new exemplo(); 
        inicio.setVisible(true);

}

}

T

Só uma coisa…

eu não consegui achar onde vc chama o metodo InserirLinha…

Vc fez isso??

Se fez, desculpa a ignorancia, mas se num fez num tem como aparece linha nenhuma…

J

A minha idéia que chamar através de uma outra classe.

V

Não use o DefaultTableModel, repetindo, não use o DefaultTableModel.

Para usar uma JTable você precisa criar um TableModel seu. Aprenda a fazer isso clicando nesses links:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

R

Cara, como faço pra inserir uma linha numa TableModel que criei, ou seja, tenho um botão abaixo da tabela e queria que quando esse botão fosse clicado inseri-se uma linha vazia na tabela.

Criei uma TableModel seguindo seu exemplo http://www.guj.com.br/posts/list/132698.java#714736

Fico no aguardo

Abraço

V

Se você seguir exatamente aquele model, seria só incluir esse método no model:

public void add(Livro livro) { valores.add(livro); fireTableRowsInserted(valores.getSize()-1, valores.getSize()-1); }

R

Cara, fiz certo então, tinha criado um método igual ao seu.

Duas dúvidas ainda:

Para setar meu model na jTable está certo isso?

jTableAulas = new javax.swing.JTable(); AulasTableModel model = new AulasTableModel(); jTableAulas.setModel(model);
Para eu acessar os métodos desse meu modelo eu poderia fazer?

Pergunto, pois criei o método de adicionar linhas como você falou, e usei o nome addLinha só que não aparece quando tento acessar como citei acima, ou seja, não consigo acessar esse método que criei.

Agradeço e fico no aguardo.

N

Cara, fiz certo então, tinha criado um método igual ao seu.

Duas dúvidas ainda:

Para setar meu model na jTable está certo isso?

jTableAulas = new javax.swing.JTable(); AulasTableModel model = new AulasTableModel(); jTableAulas.setModel(model);
Para eu acessar os métodos desse meu modelo eu poderia fazer?

Pergunto, pois criei o método de adicionar linhas como você falou, e usei o nome addLinha só que não aparece quando tento acessar como citei acima, ou seja, não consigo acessar esse método que criei.

Agradeço e fico no aguardo.

Para prover um acesso aos métodos do seu modelo, crie um objeto específico pra ele, referenciando-o na sua JTable, assim:

JTable jTableAulas = new javax.swing.JTable();
AulasTableModel model = new AulasTableModel();
jTableAulas.setModel(model);

model.acessarMetodoQualquer();

//Com o seu método, você teria que fazer Cast para acessar o modelo:
// ((AulasTableModel) jTableAulas.getModel()).acessarMetodoQualquer();

Abraços!

M

Caso voce nao guardou a referencia, mas sabe qual é o model voce pode fazer o cast para acessar os metodos.

JTable jTableAulas = new javax.swing.JTable();  
jTableAulas.setModel(new AulasTableModel());  

((AulasTableModel)model).acessarMetodoQualquer();

Mas é interessante guardar a referencia do model e trabalhar com ele parecido com o que voce faria com uma lista.

add/addAll/remove/indexOf/size e etc…

V

O getModel() retorna a interface model. Por isso, você tem que fazer cast, como teria que fazer também pro Default.

Mas o ideal é fazer o que o colega acima falou. Ou você cria um objeto para ele e o mantém, ou cria um método que faz o cast sempre:

public AulasTableModel getAulasModel() { return (AulasTableModel) jTableAulas.getModel(); }

E aí usa direto:

R

Pessoal,

Quero agradecer a todos, pois além de resolver o problema entendi o que precisa ser feito e o pq precisa.

Grande abraço pra vcs.

Criado 28 de maio de 2008
Ultima resposta 21 de out. de 2010
Respostas 14
Participantes 7