Estou com a seguinte dificuldade, no código abaixo eu tenho um procedimento que teoricamente tinha que mostrar todos os dados já cadastrados do ArrayList
no JTable
.
O nome do procedimento é chargeScreen();
, segue o código fonte deste JFrame
fico muito grato quem puder me ajudar pois não sei o que fazer !!
package Telas;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.Color;
import javax.swing.JScrollPane;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import Codigo.Cliente;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
public class Tela_grade_Cliente extends JFrame {
public JButton btnOk, btnEditar, btnExcluir;
JPanel pnlgrid;
public JTable tblCliente;
public DefaultTableModel dtm;
JScrollPane scr;
Tela_grade_Cliente gradeCliente;
Tela_editar_Cliente telaEdit;
public Tela_grade_Cliente() {
setTitle("Clientes");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
initComponents();
iniciaEvento();
// chargeScreen(); ERRO NESSA FUNÇÃO... TEM COMO OBEJTIVO ASSIM QUE A TELA FOR CHAMADA, ABRIR JÁ MOSTRANDO OS CLIENTES CADASTRADOS NA TABELA
setSize(800, 500);
this.setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}
private void initComponents() {
getContentPane().setLayout(null);
getContentPane().setBackground(Color.PINK);
//Botões
btnEditar = new JButton("Editar");
btnEditar.setEnabled(false);
btnEditar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnEditar.setBounds(398, 431, 100, 30);
btnEditar.setBackground(new Color (240,248,255));
btnEditar.setToolTipText("");
getContentPane().add(btnEditar);
btnExcluir = new JButton("Excluir");
btnExcluir.setBounds(508, 431, 100, 30);
btnExcluir.setBackground(new Color (240,248,255));
btnExcluir.setToolTipText("");
btnExcluir.setEnabled(false);
getContentPane().add(btnExcluir);
btnOk = new JButton("Ok");
btnOk.setBounds(288, 431, 100, 30);
btnOk.setBackground(new Color (240,248,255));
getContentPane().add(btnOk);
//tabela
scr = new JScrollPane();
pnlgrid = new JPanel(); //Painel
pnlgrid.setBorder(new TitledBorder("Clientes"));
pnlgrid.setBackground(Color.PINK);
pnlgrid.setLayout(new BorderLayout());
String[] colunas ={"Nome", "Endereço", "Telefone"};
dtm = new DefaultTableModel(colunas, 0){
//----------------------------------------------------------------------------------//
@Override
public boolean isCellEditable(int row, int col) { // Esse metodo tem a função de possibilitar a seleção de varias linhas
return false;
}
};
//-------------------------------------------------------------------------------------//
tblCliente = new JTable(dtm);
tblCliente.setBackground(new Color(240,248,255));
for (int i = 0; i < colunas.length; i++) {
tblCliente.getColumnModel().getColumn(i).setPreferredWidth(200);
tblCliente.getColumnModel().getColumn(i).setResizable(false);
}
tblCliente.getTableHeader().setReorderingAllowed(false);
DefaultTableCellRenderer alinCentro = new DefaultTableCellRenderer();
alinCentro.setHorizontalAlignment(SwingConstants.CENTER);
for (int i = 0; i < colunas.length; i++) {
tblCliente.getColumnModel().getColumn(i).setCellRenderer(alinCentro);
}
tblCliente.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tblCliente.setCellSelectionEnabled(false);
tblCliente.setRowSelectionAllowed(true);
pnlgrid.add(tblCliente);
pnlgrid.add(scr);
scr.setViewportView(tblCliente);
pnlgrid.setBounds(10, 11, 774, 360);
getContentPane().add(pnlgrid);
repaint();
}
//--------------------------------------------------------------------------------------//
public void iniciaEvento(){
btnOk.addActionListener(new ActionListener() {
/*fechar janela quando o botão for clicado*/
@Override
public void actionPerformed(ActionEvent arg0) {
setVisible(false);
}
});
tblCliente.getSelectionModel().addListSelectionListener(
/*Pegar linha selecionada*/
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
}
});
tblCliente.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
/*Habilita os botões que tiver uma linha selecionada*/
@Override
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
btnEditar.setEnabled(!lsm.isSelectionEmpty());
btnExcluir.setEnabled(!lsm.isSelectionEmpty());
}
});
}
//----------------------------------------------------------------------------------------//
public void iniciarEvent() {
gradeCliente.btnEditar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int posicao = gradeCliente.tblCliente.getSelectedRow();
Cliente cliente = Tela_cadastro_Cliente.clienteDB.get(posicao);
telaEdit = new Tela_editar_Cliente(cliente);
telaEdit.setVisible(true);
//refreshGrid(Tela_cadastro_Cliente.clienteDB);
if(telaEdit.cliente != null) {
Tela_cadastro_Cliente.clienteDB.set(posicao, cliente);
refreshGrid(Tela_cadastro_Cliente.clienteDB);
}
}
} );
gradeCliente.btnExcluir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int posicao = gradeCliente.tblCliente.getSelectedRow();
Tela_cadastro_Cliente.clienteDB.remove(posicao);
((DefaultTableModel) gradeCliente.tblCliente.getModel()).removeRow(posicao);
}
});
}
//---------------------------------------------------------------------------------//
/*Carregar janela, foi criado apenas para
não ter que ficar instanciando o mesmo arraylist toda hora*/
public void chargeScreen() {
refreshGrid(Tela_cadastro_Cliente.clienteDB);
}
//---------------------------------------------------------------------------------//
//--------------------------------------------------------------------------------------------------------------------------------//
public void refreshGrid(ArrayList<Cliente> lista) {
int x = gradeCliente.dtm.getRowCount();
while (x > 0) {
x--;
gradeCliente.dtm.removeRow(x);
}
for(Cliente cliente : lista) {
gradeCliente.dtm.addRow(new Object[] {cliente.getNome(), cliente.getEndereco(), cliente.getTelefone()});
}
if(gradeCliente.dtm.getRowCount() > 0) {
gradeCliente.tblCliente.setRowSelectionInterval(0, 0);
}
}
//----------------------------------------------------------------------------------------------------------------------------------//
}