Java - Ayuda en Jtable

 
Vista:
sin imagen de perfil
Val: 106
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Hector (63 intervenciones) el 04/03/2020 01:29:27
Hola amigos del foro mi consulta estoy realizando un proyecto en el cual ingreso datos para comparar datos (distintos proveedores) y que me escoga el menor por cada fila, es decir como muestro en la pantalla que se adjunta, el código que realice no me muestra error pero no realiza tal situación, aqui se los dejo para que me indiquen en que estoy fallando.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
private void actualizarActionPerformed(java.awt.event.ActionEvent evt) {
    DefaultTableModel dtm = (DefaultTableModel) tblDatos.getModel();
    if (dtm.getRowCount() > 0) {
        for (int i = 1; i < dtm.getRowCount(); i++) {
            String clave = (String) tblDatos.getValueAt(i, 0);
            Double ID1 = Double.parseDouble(clave);
            String valor = (String) tblDatos.getValueAt(i, 7);
            String valor1 = (String) tblDatos.getValueAt(i, 10);
            String valor2 = (String) tblDatos.getValueAt(i, 13);
            String valor3 = (String) tblDatos.getValueAt(i, 8);
            Double val = Double.parseDouble(valor3);
            String valor4 = (String) tblDatos.getValueAt(i, 11);
            Double val1 = Double.parseDouble(valor4);
            String valor5 = (String) tblDatos.getValueAt(i, 14);
            Double val2 = Double.parseDouble(valor4);
            if (val1.toString() == "0" && val2.toString() == "0") {
                if (val > val1 && val > val2) {
                    String a = String.valueOf(val);
                    txtprecio3.setText(a);
                    txtproveedor3.setText(valor);
                    Double val4 = Double.parseDouble(txtprecio3.getText());
                    String valor6 = (String) tblDatos.getValueAt(i, 4);
                    Double val3 = Double.parseDouble(valor6);
                    Long val6 = Math.round(val4 * val3);
                    txttotal3.setText(val6.toString());
                    try {
                        PreparedStatement pst = cn.prepareStatement("UPDATE analizacion_consorcio1 SET Nombre_Proveedor3='" + txtproveedor3.getText() + "',Punit_Repuestos3=" + txtprecio3.getText() + ",Ptotal_Repuestos3=" + txttotal3.getText() + " WHERE ID=" + ID1.toString() + "");
                        pst.executeUpdate();
                        mostrardatos1(txtsiniestro.getText());
                    } catch (SQLException ex) {
                        Logger.getLogger(Frmanalisis.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    if (val < val1 && val < val2) {
                        String a = String.valueOf(val);
                        txtprecio3.setText(a);
                        txtproveedor3.setText(valor);
                        Double val4 = Double.parseDouble(txtprecio3.getText());
                        String valor6 = (String) tblDatos.getValueAt(i, 4);
                        Double val3 = Double.parseDouble(valor6);
                        Long val6 = Math.round(val4 * val3);
                        txttotal3.setText(val6.toString());
                        try {
                            PreparedStatement pst = cn.prepareStatement("UPDATE analizacion_consorcio1 SET Nombre_Proveedor3='" + txtproveedor3.getText() + "',Punit_Repuestos3=" + txtprecio3.getText() + ",Ptotal_Repuestos3=" + txttotal3.getText() + " WHERE ID=" + ID1.toString() + "");
                            pst.executeUpdate();
                            mostrardatos1(txtsiniestro.getText());
                        } catch (SQLException ex) {
                            Logger.getLogger(Frmanalisis.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }
            }
        }
    }
    actualizar.setVisible(false);
    sumacolumna.setEnabled(true);
    sumacolumna.requestFocus();
}
ojala que me puedan ayudar ya que no puedo salir de esto, creo que puede hacerse de mover datos de una columna a otra columna con su valores y desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Franklin (179 intervenciones) el 04/03/2020 13:32:24
Por encima te comento. Yo te recomendaría usar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String valor =  tblDatos.getValueAt(i, 7).toString();
//en vez de
String valor = (String) tblDatos.getValueAt(i, 7);
 
//Para cuando uses:
if (val1.toString() == "0" && val2.toString() == "0") {
 
// Uses lo siguiente... Recuerda que para comparar el contenido de los strings debes usar equals, el resultado usando  == será muy diferente y te dará error, si no mal recuerdo es porque compara que ambos elementos sean string mas no, que el contenido sea igual, para ello se usa > String.equals(valorComparar); o String.equalsIgnoreCase(valorComparar);
 
if(val1.equeals("0") && val2.equals("0")){
// Todo su contenido
}
 
 
// en tu segundo IF tienes
 
if (val > val1 && val > val2) {
// acá estas comparando un String con un double (si no he leido mal el código uno es string y el otro double)
// parsea el string a double antes de que inicialmente sea double ya que es mas facil pasarlo a string luego de compararlo.


lo demás la verdad no lo he revisado a totalidad pero intenta hacer esos cambios a ver
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Rodrigo (623 intervenciones) el 04/03/2020 16:22:14
Sugiero usar nombres de variables que sea facil identificar de que se trata cada una.

Si los datos son double compara como numero, no como string

osea

val == 0

no

val.equals("0")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Franklin (179 intervenciones) el 04/03/2020 19:12:04
Correcto Rodrigo, aunque hago mención al equals por:
1
String valor = (String) tblDatos.getValueAt(i, 7); // Doy por hecho que el valor recibido es un String ya que no nos muestra los valores.

Pero para valores númericos sería como indicas val == 0.

La verdad es un poco confuso ya que las variables tienen nombres similares, y no identificas que tipo de valor recibe.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Rodrigo (623 intervenciones) el 04/03/2020 19:17:17
La comparacion que hace contra 0 (usando toString) la hace con la variable de tipo Double.
Ver lineas 13 y 16
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Franklin (179 intervenciones) el 04/03/2020 21:27:10
Cierto, no me percaté. Entonces si no debe usar Equals, aunque tampoco usar =="0"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 106
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Hector (63 intervenciones) el 06/03/2020 00:59:07
Rodrigo buenas te comento lo siguiente:
1
2
3
String valor =  tblDatos.getValueAt(i, 7).toString();
String valor1 = (String) tblDatos.getValueAt(i, 10).toString();
String valor2 = (String) tblDatos.getValueAt(i, 13).toString();
corresponde ala posicion de los proveedores, es decir el nombre
lo otro:
1
2
3
4
5
6
7
8
String clave = (String) tblDatos.getValueAt(i, 0);
Double ID1 = Double.parseDouble(clave);
String valor3 = (String) tblDatos.getValueAt(i, 8);
Double val = Double.parseDouble(valor3);
String valor4 = (String) tblDatos.getValueAt(i, 11);
Double val1 = Double.parseDouble(valor4);
String valor5 = (String) tblDatos.getValueAt(i, 14);
Double val2 = Double.parseDouble(valor4);
corresponde a la posición de los valores de los repuestos y el ID1 es para que realice el cambio en donde corresponde si te das cuenta en el update-
Ahora como lo puedo hacer si son valores numéricos y no String como dicen así que trato de sacarlo pero no puedo, unos me dicen que hace esto y lo otro, soy nuevo en este lenguaje de programación y cuando quiero avanzar siempre lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Rodrigo (623 intervenciones) el 06/03/2020 02:51:18
Algunas sugerencias que no corrige necesariamente el o los errores que tienes:

Cambiale el nombre a las variables por lo que representan o guardan.
Asi el codigo se entiende poco porque todo se llama valor val1, val2 etc.

Hazlo mas facil para ti y todos, haciendo programas faciles de leer. Una manera: usa nombres de variables que reflejen lo que guardan.
Si una variable la usas 1 vez solamente es posible que ni siquiera sea necesaria definirla y escribir inline sea suficiente. A veces definir una variable aunque se use 1 vez tambien es razonable porque ayuda a documentar. Si decides definir una, sugeriria, de ahora en adelante no le llames "valor" o ningun derivado de esto.

Si tienes codigo repetitivo, como veo que lo tienes, define funciones y usalas. Vas a reducir el codigo y lo haras mas leible. Ponle nombre a las funciones de acuerdo a lo que hacen.

Hacer consultas/instrucciones SQL de la manera que lo estas haciendo tambien requiere cambios: no hay que concatenar strings.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 106
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Hector (63 intervenciones) el 06/03/2020 00:49:58
Franklin buenas muchas gracias por la ayuda y comentarios, te comento que en las lineas 11, 13 y 15 las paso de String a Double, que corresponden aa los valores de cada proveedor y asu repuesto, como se muestra en el adjunto, lo otro no me deja pasarlos a int, pero la comparación se hacen con enteros y no con String, o se puede hacer de otra manera, como te digo he tratado de hacerlo estoy pegado en esto una semana por que todo lo que he pillado en internet es de traspasar de un jtabla a otro jtabe, pero nada de lo que quiero de comparar datos (valores) y traspasarlos a otra columna, sabes que debe poder hacerse de esta manera u otra
Lo otro las lineas
1
2
3
String valor =  tblDatos.getValueAt(i, 7).toString();
String valor1 = (String) tblDatos.getValueAt(i, 10).toString();
String valor2 = (String) tblDatos.getValueAt(i, 13).toString();
es donde se posciona las columasn de los nombres de los proveedores, para que puedas entender un poco más
y de antemano muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda en Jtable

Publicado por Franklin (179 intervenciones) el 06/03/2020 01:39:19
Disculpame pero es que no termino de Entender lo que necesitas.

Si con el código que ya tienes obtienes los valores de la tabla y lo pasas a double

Double val2 = Double.parseDouble(valor4);

Aunque podrías -> Double val2 = Double.parseDouble( tblDatos.getValueAt(i, 11).toString()); // Haces lo mismo pero en una linea

si Necesitas pasar un Double a un entero

int conversion = new Double(val2).intValue();

Ahora, si lo que necesitas es subir el resultado o un valor a un espacio especifico de la tabla sería

tblDatos.setValueAt(ValorEnviar, Fila, Columna);



////// Actualización.

Acabo de abrir tu DOC

Lo que entiendo es que tienes una cantidad x de productos y cada proveedor tiene un determinado precio.

De acuerdo a tu orden de compra ( cantidad de articulos ) quieres ver quien te da mejor oferta.

aqui tienes 2 situaciones.

1. para trabajar de manera uniforme y sumar todos los precios siempre, significa que todos los proveedores tienen un precio diferente de 0 para el producto, por lo que sería una suma uniforme

2. realizas la comparación para cada uno de los articulos/items y para el mejor proveedor lo subes a otra tabla o lo muestras en otro lado.


// asumiendo que tus campos de abajo se llaman txtProveedor1,txtProveedor2,txtProveedor3, txtCompra
Caso 1. Para n Articulos sumar el presupuesto total de los proveedores y compararlo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DefaultTableModel modelo = tblDatos.getModel();
int sumaProveedor1 =0;
int sumaProveedor2 =0;
int sumaProveedor3 =0;
for(int i=0; i<modelo.getRowCount(), i++){
sumaProveedor1 = Integer.parseInt(tblDatos.getValueAt(i,5)); // 5 es la posicion del precio Unit Proveedor 1
sumaProveedor2 = Integer.parseInt(tblDatos.getValueAt(i,8)); // 8 es la posicion del precio Unit Proveedor 2
sumaProveedor3 = Integer.parseInt(tblDatos.getValueAt(i,11)); // 11 es la posicion del precio Unit Proveedor 3
//Recorremos todas las filas y por cada articulos sumamos el precio  a su correspondiente proveedor
//Si los valores son Double, solo cambias el parseo a un Double
}
if(sumaProveedor1  > sumaProveedor2 && sumaProveedor1 > sumaProveedor3){
      txtCompra.setText(sumaProveedor1+"" ); // la sumatoria menor en el TXT del prov 1
}else if (sumaProveedor2 > sumaProveedor1  && sumaProveedor2 > sumaProveedor3){
      txtCompra.setText(sumaProveedor2+"" ); // la sumatoria menor en el TXT del prov 2
}else{
      txtCompra.setText(sumaProveedor3+"" ); // la sumatoria menor en el TXT del prov 3
}
 
// no estoy usando un IDE para validar la sintaxis, si hay un error por algun () o mayuscula minuscula me disculpas


en el Caso 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DefaultTableModel modelo = tblDatos.getModel();
String [] mejoresPrecios = new String [modelo.getRowCount()]; // un String para asignar el mejor precios de acuerdo a cada articulo
 
 
for(int i=0; i<modelo.getRowCount(), i++){
sumaProveedor1 = Integer.parseInt(tblDatos.getValueAt(i,5)); // 5 es la posicion del precio Unit Proveedor 1
sumaProveedor2 = Integer.parseInt(tblDatos.getValueAt(i,8)); // 8 es la posicion del precio Unit Proveedor 2
sumaProveedor3 = Integer.parseInt(tblDatos.getValueAt(i,11)); // 11 es la posicion del precio Unit Proveedor 3
 
if(sumaProveedor1  > sumaProveedor2 && sumaProveedor1 > sumaProveedor3){
     mejoresPrecios[i] = "Proveedor1";
}else if (sumaProveedor2 > sumaProveedor1  && sumaProveedor2 > sumaProveedor3){
     mejoresPrecios[i] = "Proveedor2";
}else{
      mejoresPrecios[i] = "Proveedor3";
}
 
// Con esto sabes que para cada posición del arreglo es el mismo valor de cada fila de la tabla, y que cada valor dentro significa cual proveedor tiene el mejor precio. Conociendo esto Puedes tomar el Valor con un metodo.
 
}


Hmmm me avisas si te ha aclarado algo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar