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 originalpackage app.vistas.modelos;
import app.contr.clases.Estado;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
{
@Override
public Component getTableCellRendererComponent
(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column
) { if (value instanceof Estado) {
Estado estado = (Estado) value;
setText(estado.getNombre());
}
if (row % 2 == 0) {
setBackground
(Color.
WHITE); } else {
setBackground
(new Color(173,
111,
111)); setForeground
(Color.
WHITE); }
if (isSelected) {
setBackground
(new Color(151,
193,
215)); }
return this;
}
}
Código Java:
Ver originalpackage app.vistas.modelos;
import app.contr.clases.*;
import app.vistas.facade.FacadeContr;
import app.vistas.util.Mensajes;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import up.max.proyectpages.structs.PagesList;
{
private Estado estado;
PagesList<Estado>datos;
Subasta objs;
Venta objv;
public EstadoCellEditor(Subasta xobjs) {
try {
this.objs = xobjs;
datos = FacadeContr.getInstance().manEstados().find(null);
Mensajes.MostrarAdvertencia(ex.getMessage());
}
}
@Override
public Object getCellEditorValue
() { return this.estado;
}
@Override
public Component getTableCellEditorComponent
(JTable table,
Object value,
boolean isSelected,
int row,
int column
) { if (value instanceof Estado) {
this.estado = (Estado) value;
}
datos.toList().forEach((xestado) -> {
combo.addItem(xestado);
});
combo.setSelectedItem(estado);
combo.addActionListener(this);
if (row % 2 == 0) {
combo.
setBackground(Color.
WHITE); } else {
combo.
setBackground(new Color(173,
111,
111)); combo.
setForeground(Color.
WHITE); }
if (isSelected) {
combo.
setBackground(new Color(151,
193,
215)); }
return combo;
}
@Override
try {
JComboBox<Estado> combo = (JComboBox<Estado>) event.getSource();
this.estado = (Estado) combo.getSelectedItem();
objv.setObje(estado);
objs.addDep(objv);
Mensajes.MostrarAdvertencia(ex.getMessage());
}
}
public void setVenta(Venta xobjv){
this.objv = xobjv;
}
}
Código Java:
Ver originalpackage app.vistas.modelos;
import app.contr.clases.*;
import app.vistas.util.*;
import java.sql.SQLException;
import up.max.proyectpages.structs.PagesList;
public class ModeloVentaX extends ModeloMaster
{
private final Subasta objs;
private PagesList<Venta>datos;
public ModeloVentaX(Subasta xobjs) {
this.objs = xobjs;
datos = new PagesList();
}
@Override
public void updateTable
(String criterio
) { try {
datos = objs.deps();
this.fireTableDataChanged();
Mensajes.MostrarAdvertencia(ex.getMessage());
}
}
@Override
public void getFirst() {
datos.getReload(PagesList.Navegate.goToFirst);
this.fireTableDataChanged();
}
@Override
public void getPrevious() {
datos.getReload(PagesList.Navegate.goToPrevious);
this.fireTableDataChanged();
}
@Override
public void getPresent() {
datos.getReload(PagesList.Navegate.goToPresent);
this.fireTableDataChanged();
}
@Override
public void getNext() {
datos.getReload(PagesList.Navegate.goToNext);
this.fireTableDataChanged();
}
@Override
public void getLast() {
datos.getReload(PagesList.Navegate.goToLast);
this.fireTableDataChanged();
}
@Override
public String[] getHeaders
() { return new String[]{"Artefacto",
"Estado"}; }
@Override
public int[] getAnchors() {
return new int[]{500,500};
}
@Override
public int getRowCount() {
return datos.toList().size();
}
@Override
public Object getValueAt
(int rowIndex,
int columnIndex
) { Venta v = datos.get(rowIndex);
switch(columnIndex){
case 0:
returnValue = v.getObja();
break;
case 1:
returnValue =v.getObje();
break;
default:
break;
}
return returnValue;
}
@Override
public void setValueAt
(Object aValue,
int rowIndex,
int columnIndex
) { Venta v = datos.get(rowIndex);
switch(columnIndex){
case 0:
v.setObja((Artefacto)aValue);
break;
case 1:
v.setObje((Estado)aValue);
break;
default:
break;
}
}
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex == 1;
}
}
Código Java:
Ver originalpackage app.vistas.paneles;
import app.contr.clases.*;
import app.contr.util.Conversiones;
import app.vistas.facade.FacadeContr;
import app.vistas.modelos.*;
import app.vistas.util.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.JFrame;
public class Venta_Sub
extends javax.
swing.
JPanel {
private final Subastador objs;
private TablaGenerica ts;
private TablaGenerica tv;
public Venta_Sub
(JFrame xventana, Subastador xobjs
) { initComponents();
this.objs = xobjs;
this.padre = xventana;
@Override
ts = new TablaGenerica(new ModeloSubastaXSub(objs));
ts.cargarTablaGenerica(table_subasta);
ts.getModelo().updateTable(null);
@Override
if(e.getClickCount() == 2){
try {
int id = Conversiones.CInt(ts.getTabla().getValueAt(ts.getTabla().getSelectedRow(), 0).toString());
Subasta objsub= FacadeContr.getInstance().manSubastas().findById(id);
tv = new TablaGenerica(new ModeloVentaX(objsub));
tv.getTabla().setDefaultRenderer(Estado.class, new EstadoCellRenderer());
tv.getTabla().setDefaultEditor(Estado.class, new EstadoCellEditor(objsub));
tv.cargarTablaGenerica(table_venta);
tv.getModelo().updateTable(null);
@Override
Venta v = objsub.getP().get(tv.getTabla().getSelectedRow());
((EstadoCellEditor)tv.getTabla().getDefaultEditor(Estado.class)).setVenta(v);
}
});
Mensajes.MostrarAdvertencia(ex.getMessage());
}
}
}
});
}
});
} }
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.