Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/11/2016, 22:59
Avatar de detective_jd
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.