[RESOLVIDO] Ajuda JTable Customizada

Amigos,

Sou iniciante em java e estou quebrando a cabeça em como utilizar a JTable customizada, evitando assim o modo defualt. Estou utilizando Netbeans, fazendo uso do recurso que facilita a construção dos formulários.

O que pretendo fazer é elaborar uma classe que cria esse Modelo Abstrato de Tabela e inclui-la dentro do formulário, mas não estou conseguindo.

Criei um formulário chamado FormPrincipal.java, que possui o seguinte código:


package novoprojeto;

public class FormPrincipal extends javax.swing.JFrame {
    
    MinhaTabela mt;
    
    public FormPrincipal() {
        initComponents();
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane(mt.createJTable());

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Incluir");

        jButton2.setText("Excluir");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(50, 50, 50))
        );

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 431, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(25, Short.MAX_VALUE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(29, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(22, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane2;
    // End of variables declaration                   
}

O código da JTable, que fiz com base em alguns código que achei aqui no próprio forum:



package novoprojeto;

import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class MinhaTabela extends AbstractTableModel {
       
    private ArrayList<Carro> linhas;
    private static final String[] colunas = { "Marca", "Modelo", "Placa", "Ano" };
    
    // Construtor da classe recebe os dados a ser populado 
        public MinhaTabela(ArrayList dados) {
        linhas = new ArrayList<Carro>(dados);
        fireTableStructureChanged();
    }
    
    // Método sobrescrito que retorna o número de linhas do JTable, após populado  
    @Override
    public int getRowCount() {
        return linhas.size();
    }
    
    // Método sobrescrito que retorna o número de colunas do JTable após populado  
    @Override
    public int getColumnCount() {
        return colunas.length;
    }
    
    // Método sobrescrito que vai popular e retornar cada célula do JTable
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
            Carro c = linhas.get(rowIndex);
            Object row = null;
            switch(columnIndex){
                case 0: row = c.getMarca();
                break;
                case 1: row = c.getModelo();
                break;
                case 2: row = c.getPlaca();
                break;
                case 3: row = c.getAno();
                break;
            }
           return row;
    }
          /* Este método sobrescrito, permite voce editar o JTable, caso o método anterior 
          tenha algumas colunas de algumas ou todas linhas editáveis setadas para true, 
          ou que tenha como retorno o valor true para todas as linhas e colunas. */  
        public void setValueAt(Object value, int rowIndex, int columnIndex){
            Carro c = linhas.get(rowIndex);
            switch(columnIndex){
                case 0: c.setMarca((String)value);
                break;
                case 1: c.setModelo((String)value);
                break;
                case 2: c.setPlaca((String)value);
                break;
                case 3: c.setAno((Integer)value);
                break;
            }
        }
        
    /* Este método sobrescrito vai definir o nome das colunas 
    que foi atribuído na constante "col" logo no início da classe */  
    public String getColumnName(int column){
        return colunas[column];
    }
    
    /* Este método criado por nós, vai retornar o conjunto 
    de dados inteiro do JTable, através de um List contendo 
    Objetos ClienteBean populados. */ 
    public ArrayList<Carro> getLinhas() {
        return linhas;
    }
     

    /*Criar a JTable*/
    
    public JTable createJTable(){
        
    ArrayList dados = new ArrayList();   
    //Carro c = new Carro();
    //dados.add(c);
    JTable tabela = new JTable();
    tabela.setModel(new MinhaTabela(new ArrayList<Carro>()));
    MinhaTabela modelo = (MinhaTabela)tabela.getModel();
 
    return tabela;
        
    }
    
    
    
}

Como incluo essa JTable que criei nesse formulário?

na verdade o q vc criou aí é o modelo de tabela (classe responsa vel por gerenciar as informações da tabela n a tabela em si, o q vc tem q fazer é o seguinte:
1-declarar uma JTable
2- setar o seu modelo como modelo de tabela dessa JTable

JTable tabela = new JTable();
MinhaTabela meuTableModel = new MinhaTabela();
tabela.setModel(meuTableModel);
JScrollPane scroll = new JScrollPane(tabela);

[quote=yurifw]na verdade o q vc criou aí é o modelo de tabela (classe responsa vel por gerenciar as informações da tabela n a tabela em si, o q vc tem q fazer é o seguinte:
1-declarar uma JTable
2- setar o seu modelo como modelo de tabela dessa JTable

JTable tabela = new JTable(); MinhaTabela meuTableModel = new MinhaTabela(); tabela.setModel(meuTableModel); JScrollPane scroll = new JScrollPane(tabela); [/quote]

Valeu pela resposta Yuri!

Eu fiz isso no final da classe do modelo que eu criei. Na verdade deveria ter feito isso dentro da classe FormPrincipal?

Valeu Yuri!

Eu estava inicializando a JTable no local errado mesmo. Iniciei ela dentro do FormPrincipal e deu certo.

show então xD