Olá,
Estou tendo problema para adicionar uma nova linha em um JTable, este está sincronizado com um List através de createJTableBinding,
bom tenho alguns textfields tbm ligados com a row selecionada da JTable, até normal…
Tenho um botão inseir segue o código:
Cliente c3 = new Cliente();
c3.setId(3);
c3.setNome("Flavio");
listCliente.add(c3);
int row = listCliente.size() - 1;
tableClientesCadastrados.setRowSelectionInterval(row, row);
tableClientesCadastrados.scrollRectToVisible(tableClientesCadastrados.getCellRect(row, 0, true));
na verdade o código que estou utilizando é o gerado pelo NetBeans para formulário mestre/detalhe, apenas tirei a parte de persistencia e estou instanciando a list no código.
Bom clicando em inserir ele até cria o obejto na lista, mais a Jtable não mostra a nova linha, o uso do sincronisco não teria que efetuar isso?
e se clicar logo abaixo da ultima row, os campos mostram os dados do ultimo cliente inseriro pelo botão… mas a JTable não mostra a linha… e se clico para selecionar outra row… dá o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at org.jdesktop.swingbinding.impl.ListBindingManager$ColumnDescriptionManager.validateBinding(ListBindingManager.java:191)
at org.jdesktop.swingbinding.impl.ListBindingManager.valueAt(ListBindingManager.java:99)
at org.jdesktop.swingbinding.JTableBinding$BindingTableModel.getValueAt(JTableBinding.java:713)
at javax.swing.JTable.getValueAt(JTable.java:2639)
at javax.swing.JTable.prepareRenderer(JTable.java:5653)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
segue o código completo:
package mvp.view;
import java.util.ArrayList;
import java.util.List;
import mvp.model.Cliente;
public class CadastroClienteWindow extends javax.swing.JFrame{
protected List<Cliente> listCliente;
public CadastroClienteWindow() {
listCliente = new ArrayList();
Cliente c = new Cliente();
c.setId(1);
c.setNome("Fabio");
Cliente c1 = new Cliente();
c1.setId(2);
c1.setNome("Rodrigo");
listCliente.add(c);
listCliente.add(c1);
initComponents();
setVisible(true);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
txtClienteId = new javax.swing.JTextField();
txtClienteNome = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
txtClienteTelComercial = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
txtClienteTelResidencial = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
txtClienteTelCelular = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
txtClienteEmail = new javax.swing.JTextField();
btnInserir = new javax.swing.JButton();
btnRemover = new javax.swing.JButton();
btnAlterar = new javax.swing.JButton();
btnConfirmar = new javax.swing.JButton();
btnCancelar = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
spClientesCadastrados = new javax.swing.JScrollPane();
tableClientesCadastrados = new javax.swing.JTable();
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this.listCliente, tableClientesCadastrados);
org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nome}"));
columnBinding.setColumnName("Nome");
columnBinding.setColumnClass(String.class);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("ID");
jLabel2.setText("Nome");
txtClienteId.setBackground(new java.awt.Color(204, 255, 255));
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, tableClientesCadastrados, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.id}"), txtClienteId, org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, tableClientesCadastrados, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), txtClienteId, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, tableClientesCadastrados, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.nome}"), txtClienteNome, org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, tableClientesCadastrados, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), txtClienteNome, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
bindingGroup.addBinding(binding);
jLabel3.setText("Telefone Comercial");
jLabel4.setText("Telefone Residencial");
jLabel5.setText("Telefone Celular");
jLabel6.setText("Email");
btnInserir.setText("Inserir");
btnInserir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnInserirActionPerformed(evt);
}
});
btnRemover.setText("Remover");
btnAlterar.setText("Alterar");
btnConfirmar.setText("Salvar");
btnCancelar.setText("Cancelar");
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Clientes Cadastrados"));
spClientesCadastrados.setViewportView(tableClientesCadastrados);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(spClientesCadastrados, javax.swing.GroupLayout.PREFERRED_SIZE, 621, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(spClientesCadastrados, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(txtClienteId, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(txtClienteNome, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE))
.addContainerGap(16, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtClienteTelComercial, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtClienteTelResidencial, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addComponent(txtClienteTelCelular, javax.swing.GroupLayout.DEFAULT_SIZE, 182, Short.MAX_VALUE))
.addContainerGap(16, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jLabel6)
.addContainerGap(639, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(btnInserir, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnRemover, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnAlterar, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnConfirmar, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(txtClienteEmail, javax.swing.GroupLayout.DEFAULT_SIZE, 647, Short.MAX_VALUE)))
.addContainerGap(16, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtClienteId, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtClienteNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtClienteTelComercial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtClienteTelResidencial, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtClienteTelCelular, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtClienteEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(btnInserir)
.addComponent(btnRemover)
.addComponent(btnAlterar)
.addComponent(btnConfirmar)
.addComponent(btnCancelar))
.addGap(19, 19, 19)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
bindingGroup.bind();
pack();
}// </editor-fold>
private void btnInserirActionPerformed(java.awt.event.ActionEvent evt) {
Cliente c3 = new Cliente();
c3.setId(3);
c3.setNome("Flavio");
listCliente.add(c3);
int row = listCliente.size() - 1;
tableClientesCadastrados.setRowSelectionInterval(row, row);
tableClientesCadastrados.scrollRectToVisible(tableClientesCadastrados.getCellRect(row, 0, true));
}
// Variables declaration - do not modify
private javax.swing.JButton btnAlterar;
private javax.swing.JButton btnCancelar;
private javax.swing.JButton btnConfirmar;
private javax.swing.JButton btnInserir;
private javax.swing.JButton btnRemover;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane spClientesCadastrados;
private javax.swing.JTable tableClientesCadastrados;
private javax.swing.JTextField txtClienteEmail;
private javax.swing.JTextField txtClienteId;
private javax.swing.JTextField txtClienteNome;
private javax.swing.JTextField txtClienteTelCelular;
private javax.swing.JTextField txtClienteTelComercial;
private javax.swing.JTextField txtClienteTelResidencial;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration
}
Como estou fazendo isso a titulo de estudo… qualquer ajuda é muito bem vinda…
Abraço a todos
Fábio