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?