Estou com um problema para implementar o jtable e o Jtablemodel, estou usando usando um tutorial deste site mesmo, porém não estou conseguindo chamar a jtable( preciso usar o jscrolbar mas mesmo sem ele não funciona).
Esta é minha classe dos usuarios:
public class Usuarios {
private int id;
private String usuario;
private String rg;
private String cpf;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
}
Esta é a classe modelo da Jtable:
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class UsuariosTablemodel extends AbstractTableModel {
/* Lista de Sócios que representam as linhas. */
private List<Usuarios> linhas;
/* Array de Strings com o nome das colunas. */
private String[] colunas = new String[] {
"ID", "Nome", "RG", "CPF"};
/* Cria um SocioTableModel vazio. */
public UsuariosTablemodel() {
linhas = new ArrayList<Usuarios>();
}
/* Cria um SocioTableModel carregado com
* a lista de sócios especificada. */
public UsuariosTablemodel(List<Usuarios> listaDeUsuarios) {
linhas = new ArrayList<Usuarios>(listaDeUsuarios);
}
/* Retorna a quantidade de colunas. */
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de sócios.
return linhas.size();
}
@Override
public int getColumnCount() {
// Está retornando o tamanho do array "colunas".
// Mas como o array é fixo, vai sempre retornar 4.
return colunas.length;
}
/* Retorna o nome da coluna no índice especificado.
* Este método é usado pela JTable para saber o texto do cabeçalho. */
@Override
public String getColumnName(int columnIndex) {
// Retorna o conteúdo do Array que possui o nome das colunas
// no índice especificado.
return colunas[columnIndex];
}
public Object getValueAt(int rowIndex, int columnIndex) {
// Pega o sócio da linha especificada.
Usuarios usu = linhas.get(rowIndex);
// Retorna o campo referente a coluna especificada.
// Aqui é feito um switch para verificar qual é a coluna
// e retornar o campo adequado. As colunas são as mesmas
// que foram especificadas no array "colunas".
switch (columnIndex) {
case 0: // Primeira coluna é o id.
return usu.getId();
case 1: // Segunda coluna é o nome.
return usu.getUsuario();
case 2: // Terceira coluna é o rg.
return usu.getRg();
case 3: // Quarta coluna cpf.
return usu.getCpf();
default:
// Se o índice da coluna não for válido, lança um
// IndexOutOfBoundsException (Exceção de índice fora dos limites).
// Não foi necessário verificar se o índice da linha é inválido,
// pois o próprio ArrayList lança a exceção caso seja inválido.
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
/* Seta o valor da célula especificada
* pelos índices da linha e da coluna.
* Aqui ele está implementado para não fazer nada,
* até porque este table model não é editável. */
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};
/* Retorna um valor booleano que define se a célula em questão
* pode ser editada ou não.
* Este método é utilizado pela JTable na hora de definir o editor da célula.
* Neste caso, estará sempre retornando false, não permitindo que nenhuma
* célula seja editada. */
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
/* Retorna o sócio da linha especificada. */
public Usuarios getUsuario(int indiceLinha) {
return linhas.get(indiceLinha);
}
/* Adiciona um registro. */
public void addSocio(Usuarios usu) {
// Adiciona o registro.
linhas.add(usu);
// Pega a quantidade de registros e subtrai um para achar
// o último índice. É preciso subtrair um, pois os índices
// começam pelo zero.
int ultimoIndice = getRowCount() - 1;
// Reporta a mudança. O JTable recebe a notificação
// e se redesenha permitindo que visualizemos a atualização.
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
public void removeUsuario(int indiceLinha) {
// Remove o sócio da linha especificada.
linhas.remove(indiceLinha);
// Reporta a mudança. O JTable recebe a notificação
// e se redesenha permitindo que visualizemos a atualização.
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
/* Adiciona uma lista de sócios ao final dos registros. */
public void addListaUsuarios(List<Usuarios> usu) {
// Pega o tamanho antigo da tabela.
int tamanhoAntigo = getRowCount();
// Adiciona os registros.
linhas.addAll(usu);
// Reporta a mudança. O JTable recebe a notificação
// e se redesenha permitindo que visualizemos a atualização.
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
public void limpar() {
// Remove todos os elementos da lista de sócios.
linhas.clear();
// Reporta a mudança. O JTable recebe a notificação
// e se redesenha permitindo que visualizemos a atualização.
fireTableDataChanged();
}
/* Verifica se este table model está vazio. */
public boolean isEmpty() {
return linhas.isEmpty();
}
}
Aqui é a classe JinternalFrame onde eu vo chamar esta jtable abaixo do formulario.Porém mesmo seguindo o ex que possuo não estou conseguindo.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JInternalFrame;
import javax.swing.JFrame;
import java.awt.GridBagLayout;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JScrollBar;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JList;
public class Cadinterno extends JInternalFrame {
private JTextField txusuario;
private JTextField txrg;
private JTextField txcpf;
/**
* Launch the application.
*/
/**
* Create the frame.
*/
public Cadinterno() {
setClosable(true);
setResizable(true);
setMaximizable(true);
setBounds(100, 100, 663, 711);
JLabel lblUsuario = new JLabel("Usuario");
lblUsuario.setFont(new Font("Dialog", Font.BOLD, 17));
txusuario = new JTextField();
txusuario.setFont(new Font("Dialog", Font.PLAIN, 17));
txusuario.setColumns(10);
JLabel lblRg = new JLabel("RG");
lblRg.setFont(new Font("Dialog", Font.BOLD, 17));
txrg = new JTextField();
txrg.setFont(new Font("Dialog", Font.PLAIN, 17));
txrg.setColumns(10);
JLabel lblCpf = new JLabel("CPF");
lblCpf.setFont(new Font("Dialog", Font.BOLD, 17));
txcpf = new JTextField();
txcpf.setFont(new Font("Dialog", Font.PLAIN, 17));
txcpf.setColumns(10);
JButton btnCadastra = new JButton("Cadastra");
JButton btnConsulta = new JButton("Consulta");
btnConsulta.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Consulta
usuario usu2= new usuario();
Usuarios usu = new Usuarios();
usu.setUsuario(txusuario.getText());
usu.setRg(txrg.getText());
usu.setCpf(txcpf.getText());
Vector<Usuarios> resultado = usu2.consultaUsu(usu);
System.out.println(resultado.size());
}
});
JButton btnAtiva = new JButton("Ativa");
JButton btnSair = new JButton("Sair");
btnSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblUsuario, GroupLayout.PREFERRED_SIZE, 73, GroupLayout.PREFERRED_SIZE)
.addComponent(lblRg, GroupLayout.PREFERRED_SIZE, 47, GroupLayout.PREFERRED_SIZE)
.addComponent(lblCpf))
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(txcpf, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(txrg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(txusuario, GroupLayout.PREFERRED_SIZE, 360, GroupLayout.PREFERRED_SIZE)))
.addGroup(groupLayout.createSequentialGroup()
.addComponent(btnCadastra)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(btnConsulta)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(btnAtiva, GroupLayout.PREFERRED_SIZE, 88, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnSair, GroupLayout.PREFERRED_SIZE, 91, GroupLayout.PREFERRED_SIZE)))
.addContainerGap(196, Short.MAX_VALUE))
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap(451, Short.MAX_VALUE)
// .addComponent(scrollBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(185))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(44)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(btnCadastra)
.addComponent(btnConsulta)
.addComponent(btnAtiva)
.addComponent(btnSair))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblUsuario)
.addComponent(txusuario, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(18)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblRg)
.addComponent(txrg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(18)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(txcpf, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lblCpf))
.addGap(55)
//.addComponent(scrollBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap(374, Short.MAX_VALUE))
);
getContentPane().setLayout(groupLayout);
}
}
O sistema possui a tela de login e a tela que chama este jinternalframe, caso algué queira posto.
Desde já agradeço a ajuda.