Foros del Web » Programación para mayores de 30 ;) » Java »

Cambiar fila seleccionada con CellEditor

Estas en el tema de Cambiar fila seleccionada con CellEditor en el foro de Java en Foros del Web. Hola a todos, quería hacerles la siguiente consulta, resulta que tengo un Jtable que tiene un Combobox y usé un AbstractCellEditor y un DefaultTableCellRenderer para ...
  #1 (permalink)  
Antiguo 12/11/2016, 22:51
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Cambiar fila seleccionada con CellEditor

Hola a todos, quería hacerles la siguiente consulta, resulta que tengo un Jtable que tiene un Combobox y usé un AbstractCellEditor y un DefaultTableCellRenderer para dicho cometido, pero no sé cómo modificar la venta (jtable del combobox) que está dentro de la subasta (jtable que al seleccionar el jtable del combobox), y no se me ocurre nada:

Las subastas tienen ventas almacenas dentro de las mismas, pongo el código

Código Java:
Ver original
  1. package app.vistas.modelos;
  2. import app.contr.clases.Estado;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import javax.swing.JTable;
  6. import javax.swing.table.DefaultTableCellRenderer;
  7. public class EstadoCellRenderer extends DefaultTableCellRenderer
  8. {
  9.     @Override
  10.     public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
  11.         if (value instanceof Estado) {
  12.             Estado estado = (Estado) value;
  13.             setText(estado.getNombre());
  14.         }        
  15.         if (row % 2 == 0) {
  16.             setBackground(Color.WHITE);
  17.         } else {
  18.             setBackground(new Color(173,111,111));
  19.             setForeground(Color.WHITE);
  20.         }
  21.         if (isSelected) {
  22.             setBackground(new Color(151, 193, 215));
  23.         }    
  24.         return this;
  25.     }
  26. }

Código Java:
Ver original
  1. package app.vistas.modelos;
  2. import app.contr.clases.*;
  3. import app.vistas.facade.FacadeContr;
  4. import app.vistas.util.Mensajes;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import java.sql.SQLException;
  8. import javax.swing.*;
  9. import javax.swing.table.TableCellEditor;
  10. import up.max.proyectpages.structs.PagesList;
  11. public class EstadoCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener
  12. {
  13.     private Estado estado;
  14.     PagesList<Estado>datos;
  15.     Subasta objs;
  16.     Venta objv;
  17.     public EstadoCellEditor(Subasta xobjs) {
  18.         try {
  19.             this.objs = xobjs;
  20.             datos = FacadeContr.getInstance().manEstados().find(null);        
  21.         } catch (SQLException ex) {
  22.             Mensajes.MostrarAdvertencia(ex.getMessage());
  23.         }
  24.     }              
  25.     @Override
  26.     public Object getCellEditorValue() {
  27.         return this.estado;
  28.     }
  29.     @Override
  30.     public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {
  31.         if (value instanceof Estado) {
  32.             this.estado = (Estado) value;
  33.         }        
  34.         JComboBox<Estado> combo = new JComboBox();        
  35.         datos.toList().forEach((xestado) -> {
  36.             combo.addItem(xestado);
  37.         });        
  38.         combo.setSelectedItem(estado);
  39.         combo.addActionListener(this);
  40.         if (row % 2 == 0) {
  41.             combo.setBackground(Color.WHITE);
  42.         } else {
  43.             combo.setBackground(new Color(173,111,111));
  44.             combo.setForeground(Color.WHITE);
  45.         }
  46.         if (isSelected) {
  47.             combo.setBackground(new Color(151, 193, 215));
  48.         }
  49.         return combo;
  50.     }
  51.     @Override
  52.     public void actionPerformed(ActionEvent event) {
  53.         try {
  54.             JComboBox<Estado> combo = (JComboBox<Estado>) event.getSource();
  55.             this.estado = (Estado) combo.getSelectedItem();
  56.             System.out.println(estado);
  57.             objv.setObje(estado);
  58.             objs.addDep(objv);
  59.         } catch (SQLException ex) {
  60.             Mensajes.MostrarAdvertencia(ex.getMessage());
  61.         }
  62.     }
  63.     public void setVenta(Venta xobjv){
  64.         this.objv = xobjv;
  65.     }
  66. }

Código Java:
Ver original
  1. package app.vistas.modelos;
  2. import app.contr.clases.*;
  3. import app.vistas.util.*;
  4. import java.sql.SQLException;
  5. import up.max.proyectpages.structs.PagesList;
  6. public class ModeloVentaX extends ModeloMaster
  7. {
  8.     private final Subasta objs;
  9.     private PagesList<Venta>datos;
  10.     public ModeloVentaX(Subasta xobjs) {
  11.         this.objs = xobjs;
  12.         datos = new PagesList();
  13.     }    
  14.     @Override
  15.     public void updateTable(String criterio) {
  16.         try {
  17.             datos = objs.deps();
  18.             this.fireTableDataChanged();
  19.         } catch (SQLException ex) {
  20.             Mensajes.MostrarAdvertencia(ex.getMessage());
  21.         }        
  22.     }
  23.     @Override
  24.     public void getFirst() {
  25.         datos.getReload(PagesList.Navegate.goToFirst);
  26.         this.fireTableDataChanged();
  27.     }
  28.     @Override
  29.     public void getPrevious() {
  30.         datos.getReload(PagesList.Navegate.goToPrevious);
  31.         this.fireTableDataChanged();
  32.     }
  33.     @Override
  34.     public void getPresent() {
  35.         datos.getReload(PagesList.Navegate.goToPresent);
  36.         this.fireTableDataChanged();
  37.     }
  38.     @Override
  39.     public void getNext() {
  40.         datos.getReload(PagesList.Navegate.goToNext);
  41.         this.fireTableDataChanged();
  42.     }
  43.     @Override
  44.     public void getLast() {
  45.         datos.getReload(PagesList.Navegate.goToLast);
  46.         this.fireTableDataChanged();
  47.     }
  48.     @Override
  49.     public String[] getHeaders() {
  50.         return new String[]{"Artefacto","Estado"};
  51.     }
  52.     @Override
  53.     public int[] getAnchors() {
  54.         return new int[]{500,500};
  55.     }
  56.     @Override
  57.     public int getRowCount() {
  58.         return datos.toList().size();
  59.     }    
  60.     @Override
  61.     public Object getValueAt(int rowIndex, int columnIndex) {
  62.         Object returnValue = null;
  63.         Venta v = datos.get(rowIndex);
  64.         switch(columnIndex){
  65.             case 0:
  66.                 returnValue = v.getObja();
  67.                 break;
  68.             case 1:
  69.                 returnValue =v.getObje();
  70.                 break;
  71.             default:
  72.                 break;
  73.         }
  74.         return returnValue;
  75.     }
  76.     @Override
  77.     public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
  78.         Venta v = datos.get(rowIndex);
  79.         switch(columnIndex){
  80.             case 0:
  81.                 v.setObja((Artefacto)aValue);
  82.                 break;
  83.             case 1:
  84.                 v.setObje((Estado)aValue);
  85.                 break;
  86.             default:
  87.                 break;
  88.         }
  89.     }    
  90.     @Override
  91.     public Class getColumnClass(int column) {
  92.         return getValueAt(0, column).getClass();
  93.     }    
  94.     @Override
  95.     public boolean isCellEditable(int rowIndex, int columnIndex) {
  96.         return columnIndex == 1;
  97.     }    
  98. }

Código Java:
Ver original
  1. package app.vistas.paneles;
  2. import app.contr.clases.*;
  3. import app.contr.util.Conversiones;
  4. import app.vistas.facade.FacadeContr;
  5. import app.vistas.modelos.*;
  6. import app.vistas.util.*;
  7. import java.awt.event.*;
  8. import java.sql.SQLException;
  9. import javax.swing.JFrame;
  10. public class Venta_Sub extends javax.swing.JPanel
  11. {
  12.     private final JFrame padre;
  13.     private final Subastador objs;
  14.     private TablaGenerica ts;
  15.     private TablaGenerica tv;
  16.     public Venta_Sub(JFrame xventana, Subastador xobjs) {
  17.         initComponents();
  18.         this.objs = xobjs;
  19.         this.padre = xventana;
  20.         this.padre.addWindowListener(new WindowAdapter() {
  21.             @Override
  22.             public void windowOpened(WindowEvent e) {
  23.                 ts = new TablaGenerica(new ModeloSubastaXSub(objs));
  24.                 ts.cargarTablaGenerica(table_subasta);
  25.                 ts.getModelo().updateTable(null);                
  26.                 ts.getTabla().addMouseListener(new MouseAdapter() {
  27.                     @Override
  28.                     public void mouseClicked(MouseEvent e) {
  29.                         if(e.getClickCount() == 2){
  30.                             try {
  31.                                 int id = Conversiones.CInt(ts.getTabla().getValueAt(ts.getTabla().getSelectedRow(), 0).toString());
  32.                                 Subasta objsub= FacadeContr.getInstance().manSubastas().findById(id);
  33.                                 tv = new TablaGenerica(new ModeloVentaX(objsub));
  34.                                 tv.getTabla().setDefaultRenderer(Estado.class, new EstadoCellRenderer());
  35.                                 tv.getTabla().setDefaultEditor(Estado.class, new EstadoCellEditor(objsub));
  36.                                 tv.cargarTablaGenerica(table_venta);                                                                
  37.                                 tv.getModelo().updateTable(null);  
  38.                                 tv.getTabla().addMouseListener(new MouseAdapter() {
  39.                                     @Override
  40.                                     public void mouseClicked(MouseEvent e) {
  41.                                         Venta v = objsub.getP().get(tv.getTabla().getSelectedRow());
  42.                                         ((EstadoCellEditor)tv.getTabla().getDefaultEditor(Estado.class)).setVenta(v);
  43.                                     }                    
  44.                                 });
  45.                             } catch (SQLException ex) {
  46.                                 Mensajes.MostrarAdvertencia(ex.getMessage());
  47.                             }
  48.                         }
  49.                     }                    
  50.                 });
  51.             }            
  52.         });
  53.     } }

La cuestion es que no sé como pasar la venta seleccionada a la cual cambié el estado con el combobox al actionPerformed del CellEditor.

Espero sus respuestas y Saludos.
  #2 (permalink)  
Antiguo 13/11/2016, 22:59
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Cambiar fila seleccionada con CellEditor

Hola a todos, resulta que pude resolverlo, todo lo que tenía que hacer era trabajar con el cellEditorComponent del EstadoCellEditor:

Código Java:
Ver original
  1. package app.vistas.modelos;
  2. import app.contr.clases.*;
  3. import app.vistas.facade.FacadeContr;
  4. import app.vistas.util.Mensajes;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import java.sql.SQLException;
  8. import javax.swing.*;
  9. import javax.swing.table.TableCellEditor;
  10. import up.max.proyectpages.structs.PagesList;
  11. public class EstadoCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener
  12. {
  13.     private Estado estado;
  14.     PagesList<Estado>datos;
  15.     Subasta objs;
  16.     Venta objv;
  17.     public EstadoCellEditor(Subasta xobjs) {
  18.         try {
  19.             this.objs = xobjs;            
  20.             datos = FacadeContr.getInstance().manEstados().find(null);        
  21.         } catch (SQLException ex) {
  22.             Mensajes.MostrarAdvertencia(ex.getMessage());
  23.         }
  24.     }              
  25.     @Override
  26.     public Object getCellEditorValue() {
  27.         return this.estado;
  28.     }
  29.     @Override
  30.     public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {
  31.         if (value instanceof Estado) {
  32.             this.estado = (Estado) value;
  33.         }        
  34.         JComboBox<Estado> combo = new JComboBox();        
  35.         datos.toList().forEach((xestado) -> {
  36.             combo.addItem(xestado);
  37.         });        
  38.         combo.setSelectedItem(estado);
  39.         combo.addActionListener(this);
  40.         objv = objs.getP().get(row);
  41.         if (row % 2 == 0) {
  42.             combo.setBackground(Color.WHITE);
  43.             combo.setForeground(Color.BLACK);
  44.         } else {
  45.             combo.setBackground(new Color(173,111,111));
  46.             combo.setForeground(Color.WHITE);
  47.         }
  48.         if (isSelected) {
  49.             combo.setBackground(new Color(151, 193, 215));
  50.         }
  51.         return combo;
  52.     }
  53.     @Override
  54.     public void actionPerformed(ActionEvent event) {
  55.         try {
  56.             JComboBox<Estado> combo = (JComboBox<Estado>) event.getSource();
  57.             this.estado = (Estado) combo.getSelectedItem();
  58.             System.out.println(estado);            
  59.             objv.setObje(estado);
  60.             objs.addDep(objv);
  61.         } catch (SQLException ex) {
  62.             Mensajes.MostrarAdvertencia(ex.getMessage());
  63.         }
  64.     }
  65. }

Código Java:
Ver original
  1. package app.vistas.modelos;
  2. import app.contr.clases.Estado;
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import javax.swing.JTable;
  6. import javax.swing.table.DefaultTableCellRenderer;
  7. public class EstadoCellRenderer extends DefaultTableCellRenderer
  8. {
  9.     @Override
  10.     public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
  11.         if (value instanceof Estado) {
  12.             Estado estado = (Estado) value;
  13.             setText(estado.getNombre());
  14.         }        
  15.         if (row % 2 == 0) {
  16.             setBackground(Color.WHITE);
  17.             setForeground(Color.BLACK);
  18.         } else {
  19.             setBackground(new Color(173,111,111));
  20.             setForeground(Color.WHITE);
  21.         }
  22.         if (isSelected) {
  23.             setBackground(new Color(151, 193, 215));
  24.         }    
  25.         return this;
  26.     }
  27. }

Y Con esto hago lo que quería, sólo me quedó una duda: ¿cómo tendría que hacer si en una columna quiero poner un combobox, y en otra un jtextfield o un jcheckbox o cualquier otro componente?

Espero sus respuestas y saludos.

Etiquetas: combobox, fila
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:37.