Problema com Jtable e Frame

7 respostas
R

olá galera, tenho duas classes, uma classe com a JTable, e outra com a Frame, porem não consigo adicionar a JTable na tela…
abaixo os códigos… desde jah agradeço a todos…

package TelaAplicação;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import ClassesIMC.*;


public class PessoaTableModel extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	
    private List<Pessoa> linhas;
 
    
    public PessoaTableModel() {
        linhas = new ArrayList<Pessoa>();
    }
 
   
    public PessoaTableModel(List<Pessoa> listaDeSocios) {
        linhas = new ArrayList<Pessoa>(listaDeSocios);
    }
    
 
    private String[] colunas = new String[] {"Código", "Nome", "Peso", "Altura" };
 
    private static final int CODIGO = 0;
    private static final int NOME = 1;
    private static final int ALTURA = 2;
    private static final int PESO = 3;
    
    public int getRowCount() {
        return linhas.size();
    }
    
    public int getColumnCount() {
        return colunas.length;
    }
    
    public String getColumnName(int columnIndex) {
        return colunas[columnIndex];
    };
    
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
        case CODIGO:
        	return int.class;
        case NOME:
            return String.class;
        case ALTURA:
            return double.class;
        case PESO:
        	return double.class;
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
        
        Pessoa pessoa = linhas.get(rowIndex);
     
        switch (columnIndex) {
        case CODIGO:
        	return pessoa.getCodigo();
        case NOME:
            return pessoa.getNome();
        case ALTURA:
            return pessoa.getAltura();
        case PESO:
        	return pessoa.getPeso();
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        
        Pessoa pessoa = linhas.get(rowIndex);
     
        switch (columnIndex) {
        case CODIGO:
            pessoa.setCodigo((int) aValue);
            break;
        case NOME:
           pessoa.setNome((String) aValue);
            break;
        case ALTURA:
            pessoa.setAltura((double) aValue);
            break;
        case PESO:
            pessoa.setPeso((double) aValue);
            break;
        default:
            throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
         
        fireTableCellUpdated(rowIndex, columnIndex); 
    }
    
    public Pessoa getPessoa(int indiceLinha) {
        return linhas.get(indiceLinha);
    }
     
   
    public void addPessoa(Pessoa pessoa) {
       
        linhas.add(pessoa);

        int ultimoIndice = getRowCount() - 1;
    
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }
     
    public void removePessoa(int indiceLinha) {
      
        linhas.remove(indiceLinha);
      
        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }
     
    public void addListaDePessoas(List<Pessoa> pessoas) {
       
        int indice = getRowCount();
    
        linhas.addAll(pessoas);
     
        fireTableRowsInserted(indice, indice + pessoas.size());
    }
     
   
    public void limpar() {
        
        linhas.clear();
        fireTableDataChanged();
    }
 
}

7 Respostas

R
package TelaAplicação;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import ClassesIMC.Pessoa;

public class Tela  extends JFrame{
	private static final long serialVersionUID = 1L;
	private JLabel lbNome, lbPeso, lbAltura, lbCodigo, lbExPeso, lbExAltura;
    private JTextField txtNome, txtPeso, txtAltura, txtCodigo;
    private JButton btnSalvar, btnCalcularIMC, btnExcluir, btnPesquisar, btnLimpar;
    
    public Tela(){
    	super (" IMC ");
    	
    	Container tela = getContentPane();
        setLayout(null);
        lbNome = new JLabel("Nome");
        lbPeso = new JLabel("Peso");
        lbAltura= new JLabel("Altura");
        lbCodigo = new JLabel("Código");
        lbExPeso = new JLabel("Ex:68,8 ");
        lbExAltura = new JLabel("Ex:1,65 ");
        
        lbNome.setBounds(10, 15, 240, 15);
        lbPeso.setBounds(10, 60, 240, 15);
        lbAltura.setBounds(200, 60, 240, 15);
        lbCodigo.setBounds(430, 60, 240, 15);
        lbExPeso.setBounds(127, 62, 240, 15);
        lbExAltura.setBounds(337, 62, 240, 15);
        
        lbNome.setForeground(Color.BLACK);
        lbPeso.setForeground(Color.BLACK);
        lbAltura.setForeground(Color.BLACK);
        lbCodigo.setForeground(Color.BLACK);
        lbExPeso.setForeground(Color.GRAY);
        lbExAltura.setForeground(Color.GRAY);
        
        lbNome.setFont(new Font("Courier New", Font.BOLD, 16));
        lbPeso.setFont(new Font("Courier New", Font.BOLD, 16));
        lbAltura.setFont(new Font("Courier New", Font.BOLD, 16));
        lbCodigo.setFont(new Font("Courier New", Font.BOLD, 16));
        lbExPeso.setFont(new Font("Courier New", Font.BOLD, 15));
        lbExAltura.setFont(new Font("Courier New", Font.BOLD, 15));
    	
        tela.add(lbNome);
        tela.add(lbAltura);
        tela.add(lbPeso);
        tela.add(lbCodigo);
        tela.add(lbExPeso);
        tela.add(lbExAltura);
        
        txtNome = new JTextField();
        txtPeso = new JTextField();
        txtAltura = new JTextField();
        txtCodigo = new JTextField();
        
        
        txtNome.setBounds(55, 10, 520, 30);
        txtPeso.setBounds(55, 55, 70, 30);
        txtAltura.setBounds(265, 55, 70, 30);
        txtCodigo.setBounds(500, 55, 75, 30);
 
        tela.add(txtNome);
        tela.add(txtPeso);
        tela.add(txtAltura);
        tela.add(txtCodigo);
 
        btnSalvar = new JButton("Salvar");
        btnCalcularIMC = new JButton("Calcular IMC");
        btnExcluir = new JButton("Excluir");
        btnPesquisar = new JButton("Pesquisar");
        btnLimpar = new JButton("Limpar");
        
        btnCalcularIMC.setBounds(170, 100, 200, 30);
        btnSalvar.setBounds(10, 150, 130, 30);
        btnExcluir.setBounds(155, 150, 130, 30);
        btnLimpar.setBounds(302, 150, 130, 30);
        btnPesquisar.setBounds(445, 150, 130, 30);
        
        tela.add(btnSalvar);
        tela.add(btnCalcularIMC);
        tela.add(btnExcluir);
        tela.add(btnPesquisar);
        tela.add(btnLimpar);
        tela.setBackground(Color.pink); 
        
        setSize(600, 400);
        setVisible(true);
        setLocation(null);
       
    	
    }
    public static void main(String[] args) {
        Tela frame = new Tela();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
U

Rafa2012 AbstractTableModel é apenas um model de tabela.
Para isso cria um objeto do tipo JTable e passa o model ao instanciar.

Ai depois é só add o objeto JTable ao frame.

R

jah tentei amigão, mas não sei como fazer msm, não… obrigado

U

Rafa2012 vc ainda deseja fazer?

R

eu consiguir fazer a tabela aparecer, mas o nome das colunas não aparecem… desejo sim amigão…

U

Rafa2012 para a tabela aparecer com o título, cria um objeto do tipo JScrollPane e utilize o seguinte método:

Isso fará com que a tabela seja jogada dentro do Scroll, fazendo com que crie uma barra de rolagem, se for necessário, e apareça os rótulos da tabela.

E pronto, ao invés de vc add a tabela ao Jframe, add o scrollpane.

R

deu certo, valeu pela dica amigão… abraços

Criado 30 de abril de 2013
Ultima resposta 2 de mai. de 2013
Respostas 7
Participantes 2