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

JComboBox en JTable

Estas en el tema de JComboBox en JTable en el foro de Java en Foros del Web. Hola mu buenas tengo un problema: Estoy creando un programa de escritorio y el problema que tengo es que cuando agrego valores a una fila ...
  #1 (permalink)  
Antiguo 06/11/2011, 07:21
Avatar de gustavopino  
Fecha de Ingreso: septiembre-2011
Ubicación: venezuela
Mensajes: 152
Antigüedad: 12 años, 7 meses
Puntos: 29
Pregunta JComboBox en JTable

Hola mu buenas tengo un problema:
Estoy creando un programa de escritorio y el problema que tengo es que cuando agrego valores a una fila agrego un Jcombobox en esa fila para modificar el valor de precio el combobox va ser el descuento que le hace al cliente hasta aqui todo bien el problema surge cuando agrego la otra fila con el combobox la primera fila agarra los valores de la segunda fila
Por favor ayudame.
Aqui pongo el codigo:
Código PHP:
Ver original
  1. public class ModeloVentas {
  2.  
  3.             private static String driver = "org.postgresql.Driver";
  4.             private static String ruta = "jdbc:postgresql://localhost:5432/ProAdmin";
  5.             private static String user = "publiventa";
  6.             private static String password = "Gus4777";
  7.             private String sql;
  8.             private Statement st=null;
  9.             private ResultSet r=null;
  10.             private JComboBox des;
  11.             private String precio;
  12.  
  13.     public ModeloVentas() {
  14.         des = new JComboBox();
  15.  
  16.     }
  17.  
  18.  
  19.  
  20.     public static Connection conexion(){
  21.            
  22.             Connection con = null;
  23.                 try{
  24.                 Class.forName(driver);
  25.                 con= DriverManager.getConnection(ruta,user,password);
  26.                 }catch(Exception e){
  27.                     JOptionPane.showMessageDialog(new JFrame(),"¡Error al conectar con la base de datos!","ERROR",JOptionPane.INFORMATION_MESSAGE);
  28.                 }
  29.             return con;
  30.  
  31.             }
  32.  
  33.     public float descuento(float precio, int porcentaje){
  34.         return precio*porcentaje/100;
  35.     }
  36.    
  37. public void cambioPrecio(String valor, JComboBox des, String precio, JTable tb){
  38.            
  39.                 try {
  40.                     int a = 0;
  41.                     sql = "SELECT descuento[1] AS des1, descuento[2] AS des2, descuento[3] AS des3,descripcion "
  42.                     + "FROM articulos WHERE descripcion = '" + valor + "'";
  43.                     st = conexion().createStatement();
  44.                     r = st.executeQuery(sql);
  45.                    
  46.            if(r.next()){
  47.                 switch(des.getSelectedIndex()){
  48.                         case 1:
  49.                          a = r.getInt("des1");
  50.                         break;
  51.                         case 2:
  52.                          a = r.getInt("des2");
  53.                         break;
  54.                         case 3:
  55.                          a = r.getInt("des3");
  56.                         break;
  57.                         default:
  58.                          a = 0;
  59.                         break;
  60.                     }
  61.  
  62.             DecimalFormat format = new DecimalFormat("###,###.00");
  63.             float descuento = descuento(Float.parseFloat(precio),a);
  64.             float total = Float.parseFloat(precio) - descuento;
  65.             tb.getModel().setValueAt(format.format(total), tb.getSelectedRow(), 7);
  66.        }
  67.                 } catch (SQLException ex) {
  68.                     Logger.getLogger(ModeloVentas.class.getName()).log(Level.SEVERE, null, ex);
  69.                 }
  70.            
  71.        
  72. }
  73.  
  74.     public void Buscar(final String valor, DefaultTableModel modelo, final JTable tb, int item){
  75.         try{
  76.             sql = "SELECT categoria, articulo, serial, seriales, cantidad, precio "
  77.                     + "FROM articulos WHERE descripcion = '" + valor + "'";
  78.             st = conexion().createStatement();
  79.             r = st.executeQuery(sql);
  80.  
  81.             if(r.next()){
  82.                 precio = r.getString("precio").replace(",", ".");
  83.                 Object[] fila = new Object[8];
  84.                 fila[0] = item;
  85.                 fila[1] = r.getString("categoria");
  86.                 fila[2] = r.getString("articulo");
  87.                 fila[3] = valor;
  88.                 fila[5] = "1";
  89.                 fila[6] = "Precio Actual";
  90.                 fila[7] = precio;
  91.  
  92.                 String ar1 = r.getString("seriales").replace("{","");
  93.                 String ar2 = ar1.replace("}", "");
  94.                 String[] seriales = ar2.split(",");
  95.                 fila[4] = seriales[0];
  96.  
  97.                 /*    for(int i=0;i<seriales.length;i++){
  98.                         serial.addItem(seriales[i]);
  99.                     }*/
  100.                
  101.              modelo.addRow(fila);
  102.  
  103.        
  104.         des.addItem("Precio Actual");
  105.         des.addItem("Precio 1");
  106.         des.addItem("Precio 2");
  107.         des.addItem("Precio 3");
  108.        
  109.        
  110.  
  111.         TableColumn tl = tb.getColumnModel().getColumn(6);
  112.         tl.setCellEditor(new DefaultCellEditor(des));
  113.  
  114.         DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
  115.         renderer.setToolTipText("Elige el tipo de descuento");
  116.         tl.setCellRenderer(renderer);
  117.  
  118.  
  119.  
  120.         r.close();
  121.         st.close();
  122.         conexion().close();
  123.             }
  124.             des.addItemListener(new ItemListener() {
  125.  
  126.                     public void itemStateChanged(ItemEvent e) {
  127.  
  128.                          if(des.getSelectedIndex() != -1){
  129.                            
  130.                         }
  131.                     }
  132.                 });
  133.  
  134.         }catch(SQLException ex){
  135.             Logger.getLogger(ModeloVentas.class.getName()).log(Level.SEVERE, null, ex);
  136.  
  137.         }
  138.     }
  139.  
  140. }
__________________
Visita a Publiventa donde compras y vendes de todo
  #2 (permalink)  
Antiguo 06/11/2011, 16:44
Avatar de gustavopino  
Fecha de Ingreso: septiembre-2011
Ubicación: venezuela
Mensajes: 152
Antigüedad: 12 años, 7 meses
Puntos: 29
Respuesta: JComboBox en JTable

Alguien que me pueda ayudar??
__________________
Visita a Publiventa donde compras y vendes de todo
  #3 (permalink)  
Antiguo 07/11/2011, 04:07
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: JComboBox en JTable

Buenos días,

El problema es que estás usando el JComboBox de la manera incorrecta. Tienes que tener en cuenta que la referencia al JComboBox que tienes creada (des) está siendo compartida por todas las filas, porque estás usando ese JComboBox como editor de una celda.

No deberías utilizar directamente la referencia al JCombox, solo para pasarle la referencia al método setCellEditor.

Prueba lo siguiente, aunque no sé si esta será tu intención:

Código Java:
Ver original
  1. switch((Integer)tb.getModel().getValueAt(tb.getSelectedRow(),6))

Si no te sirve, explica un poco más que quieres hacer.

Saludos.
  #4 (permalink)  
Antiguo 07/11/2011, 14:31
Avatar de gustavopino  
Fecha de Ingreso: septiembre-2011
Ubicación: venezuela
Mensajes: 152
Antigüedad: 12 años, 7 meses
Puntos: 29
Respuesta: JComboBox en JTable

lo que he querido hacer es cuando le de en el combo donde dice precio 1 este cambie el valor que vale cada producto y asi sucesivamente el problema esta que cuando agrego otra fila los valores del jcombo que se acabó de crear se repite en la fila anterior no se si me esplique bien.

Gracias por responder.
Espero tu respuesta
__________________
Visita a Publiventa donde compras y vendes de todo

Etiquetas: jcombobox, jtable, sql, string
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 21:43.