Bom dia Gente, como faço para capturar os numeros de vários JSpinner dentro de uma tabela… segue a foto do que estou falando, todos esse JSpinner que aparece na imagem eu queria captura os vcalores deles
Alguem?
Primeiro percorra as linhas da sua JTable recupera o JSpinner na 4 coluna depois de um getValue() no seu JSpinner.
DefaultTableModel tableModel = (DefaultTableModel) tabela.getModel();
int total = tableModel .getRowCount();
for (int x=0; x<total; x++) {
JSpinner spin = (JSpinner ) tableModel.getValueAt(x, 3);
int valor = (Integer) spin.getValue();
}
>
Beleza eu testei isso, coloquei no botao salvar esse comando que voce passou so que na hora de pegar o Spinner ele da o seguinte erro…
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to javax.swing.JSpinner
at apontamento.JFCadastraRota.btnSalvarActionPerformed(JFCadastraRota.java:328)
So que eu uso uma classe que cria esse Jspinner, eu não usei o do netbeans,
Posta o código onde você adiciona o JSpinner a sua JTable.
Seria isso?
ListaRotaTModel tableModel = (ListaRotaTModel ) jTable1.getModel();
int total = tableModel.getRowCount();
for (int x=0; x<total; x++) {
PadraoGridView spin = (PadraoGridView ) tableModel.getValueAt(x, 3);
int valor = (Integer) spin.getCellEditorValue();
}
Essa e a minha classe que cria o Jspinner dentro da Jtable…
public class PadraoGridView extends DefaultTableCellRenderer implements TableCellEditor {
JSpinner spinner = new JSpinner();
private double valoranterior;
@Override
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
// component will actually be this.
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
component.setBackground(row%2==0 ? Color.getHSBColor(125,255,145) : Color.LIGHT_GRAY);
//JSpinner spinner = new JSpinner();
TableColumn col1 = table.getColumnModel().getColumn(3);
//TableColumn col = table.getColumnModel();
TableColumnModel col = table.getColumnModel();
col.getColumn(0).setPreferredWidth(200);
col.getColumn(1).setPreferredWidth(300);
col.getColumn(2).setPreferredWidth(30);
col.getColumn(3).setPreferredWidth(50);
col1.setCellEditor(new PadraoGridView());
if(column == 3){
table.setRowHeight(30);
//table.setEditingRow(row);
//if (component instanceof JLabel) {
//spinner.setValue(Integer.valueOf(((JLabel) component).getText()));
//TableColumn column = table.getColumnModel().getColumn(1);
//} else if (value != null) {
//spinner.setValue(Integer.valueOf(value.toString()));
//} else {
//System.out.println("Não foi possivel criar Renderer");
//}
// spinner.setEditor(spinner);
spinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
return spinner;
} else {
return component;
}
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
spinner.setValue(value);
return spinner;
}
@Override
public Object getCellEditorValue() {
return spinner.getValue();
}
@Override
public boolean isCellEditable(EventObject anEvent) {
Object evt = null;
if (evt instanceof MouseEvent) {
return ((MouseEvent) evt).getClickCount() >= 2;
}
return true;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
@Override
public boolean stopCellEditing() {
return true;
}
@Override
public void cancelCellEditing() {
}
@Override
public void addCellEditorListener(CellEditorListener l) {
listenerList.add(CellEditorListener.class, l);
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
listenerList.remove(CellEditorListener.class, l);
}
}
Entendeu??
?
Tenta imprimir o que ta vindo na String…
Como assim imprimir o que vem na String?
Na imagem que eu mandei no campo da tabela chamado Seq.Entrega eu irei definir qual cliente vai ser entregue a mercadoria primeiro certo?, ai nessa mesma imagem eu tenho um botao salvar que eu penso em que, quando o operador realizar a consulta eu ja irei ter uma lista carregada com as informações como cod_cliente, nome_cliente, peso_do_produto… Com essas informações o operador vai definir qual cliente vai ser entregue a mercadoria, ele definindo eu so vou fazer um for para adicionar a esta lista a sequencia de entrega definida neste Jspinner,so que quando eu clico no botao salvar com esse metodo que voce me passou da este erro.
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ListaRotaTModel tableModel = (ListaRotaTModel ) jTable1.getModel();
int total = tableModel.getRowCount();
for (int x=0; x<total; x++) {
PadraoGridView spin = (PadraoGridView) tableModel.getValueAt(x, 3);
//JSpinner spin = (JSpinner) tableModel.getValueAt(x, 3);
System.out.println("Problema ->"+spin.getCellEditorValue());
int valor = (Integer) spin.getCellEditorValue();
}
Este acima e o botao salvar e este a baixo e o erro que acontece…
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to apontamento.utils.PadraoGridView
at apontamento.JFCadastraRota.btnSalvarActionPerformed(JFCadastraRota.java:328)
at apontamento.JFCadastraRota.access$300(JFCadastraRota.java:20)
at apontamento.JFCadastraRota$4.actionPerformed(JFCadastraRota.java:149)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Faz a troca
PadraoGridView spin = (PadraoGridView) tableModel.getValueAt(x, 3);
Por
System.out.println(tableModel.getValueAt(x, 3));
Acredito que o seu tableModel.getValueAt(x, 3) já esta vindo o valor do seu JSpinner.
Está vindo 0
Porque será que está retornando 0?
Alguem?
O meu problema é o seguinte, quando eu mudo o valor do meu jspinner eu não sei aonde ele armazena esse valor, pois eu tenho que jogar esse valor em uma beans que possui uma variavel que guarda ele…