comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Duda sobre TableView y Listener Javafx

  • 4 Respuestas
  • 2721 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado coke951

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: Cok3951
« en: Julio 08, 2015, 05:54:21 pm »
Que tal!, estoy aprendiendo un poco sobre los Listener, mi objetivo es que cuando una celda es modificada entonces llame un método.
La celda representa la cantidad, por lo tanto si la celda de la cantidad de un producto es modificada quiero que vuelva a hacer los cálculos para saber cuanto sera el total, pero no logro hacer eso automáticamente, he tenido que utilizar un botón para que cada vez que haya una modificación en la cantidad de productos el usuario tenga que presionar el botón y calcular el total y de esta forma es un poco mas tediosa, me gustaría hacerlo automáticamente, si hay una modificación en la celda entonces vuelva a hacer los cálculos.

Según yo, esto se puede llevar a cabo utilizando un listener, soy nuevo en JavaFx, y me resulta un poco complicado, he mirado por Internet pero no logre encontrar lo que yo quería hacer.
Espero que me puedan ayudar.

Gracias de antemano.
Saludos!
« Última modificación: Julio 09, 2015, 08:19:16 pm por Gabriela »

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #1 en: Julio 09, 2015, 01:20:14 am »
Supongamos que tienes una columna, la cual su tipo es Sell (Un objeto Sell) y tipo de contenido será Integer, que representa la cantidad de productos, por ejemplo:

Código: Java
  1. TableColumn<Sell, Integer> columnCant = new TableColumn<>("Cantidad");

Ahora debemos de asignarle un EventListener que se disparará en el commit de una edición, es decir, cuando se termine de editar la celda:

Código: Java
  1. columnCant.setOnEditCommit(new EventHandler<No tienes permisos para ver links. Registrate o Entra con tu cuenta.CellEditEvent<Sell, Integer>>() {
  2.     @Override
  3.     public void handle(No tienes permisos para ver links. Registrate o Entra con tu cuenta.CellEditEvent<Sell, Integer> cell) {
  4.         updateTotal(cell.getNewValue());
  5.     }
  6. });

El método getNewValue() obtiene el nuevo valor producto de la edición de la celda. No necesitas hacerle un cast ya que el tipo de dato de retorno será el especificado por generics en el TableColumn. Ahora este valor es pasado por parámetro al método updateTotal que actualizará el valor del total de la venta.

Desconectado coke951

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: Cok3951
« Respuesta #2 en: Julio 09, 2015, 04:13:07 am »
Que tal de nuevo Gus!

Lo he intentado con tu codigo, pero no me funciono. Esto fue lo que hice.

mi TableColumn lo tengo declarado de esta manera:
Código: Java
  1. @FXML
  2. private TableColumn<Producto, Integer> cantidadColumna = new TableColumn<>("Cantidad");
  3.  

y para lo segundo lo hice en el metodo initialize()
Código: Java
  1. cantidadColumna.setOnEditCommit(new EventHandler<No tienes permisos para ver links. Registrate o Entra con tu cuenta.CellEditEvent<Producto, Integer>>(){
  2.         @Override
  3.         public void handle(No tienes permisos para ver links. Registrate o Entra con tu cuenta.CellEditEvent<Producto, Integer> cell){
  4.                 aplicarCosto(cell.getNewValue());
  5.         }
  6. });
  7.  

Me parece que he hecho todo bien, supongo que el problema esta en la forma en la que edito la celda de cantidad, para eso tengo un textfield en el cual al momento de seleccionar un item en el tableview, en el textfield aparece el actual cantidad de ese producto, al modificarlo se actualiza automáticamente en el tableview y no ocurre nada, pero entonces, mi mente tomo un alto grado de conciencia haha...

Tenia un método el cual escuchaba ese textfield para que lanzara un error si el usuario introdujera una letra o numero flotante, lo que hice fue que si cambia el numero entonces actualizara el precio total, y ahora mismo me funciona esta solución, no se como no se me ocurrió antes.

En fin, el código en esta respuesta es correcto? o algo hice mal? ¿es por la forma en la que estoy modificando la cantidad que no llama al evento?
Te adjunto una imagen de mi programa.


Muchas gracias por responderme Gus!
Saludos!

Desconectado Gus Garsaky

  • *
  • Underc0der
  • Mensajes: 93
  • Actividad:
    0%
  • Reputación -1
    • Ver Perfil
  • Skype: gus.garsaky
« Respuesta #3 en: Julio 09, 2015, 09:26:52 am »
Hola Coke y disculpa la demora (estaba trabajando).

Primero, dado que mediante la anotación @FXML inyectas la dependencia de la columna, NO necesitas instanciar con new. Se supone que esa columna ya está definida en el FXML, con nombre y todo.

Código: Java
  1. @FXML private TableColumn<Producto, Integer> cantidadColumna;

Ahora, el código que yo te pasé es para hacer algo cuando se edita directamente en la celda. Tú has obtenido la fila actual seleccionada y has puesto los datos en el apartado derecho, para lo cual es correcto usar un listener para el TextField:

Código: Java
  1. txtCantidad.textProperty().addListener((observable, oldValue, newValue) -> {
  2.     aplicatCosto(No tienes permisos para ver links. Registrate o Entra con tu cuenta.parseInt(newValue));
  3. });

Lo anterior es lo mismo que:

Código: Java
  1. txtCantidad.textProperty().addListener(new ChangeListener<String>() {
  2.     @Override
  3.     public void changed(ObservableValue<? extends String> observable,
  4.             No tienes permisos para ver links. Registrate o Entra con tu cuenta oldValue, No tienes permisos para ver links. Registrate o Entra con tu cuenta newValue) {
  5.          aplicarCosto(No tienes permisos para ver links. Registrate o Entra con tu cuenta.parseInt(newValue));
  6.     }
  7. });

Con la diferencia que estoy usando Lambdas ( Java 8 ). Saludos.

Desconectado coke951

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: Cok3951
« Respuesta #4 en: Julio 09, 2015, 06:52:36 pm »
Efectivamente es lo que sospechaba, yo lo modificaba desde el textfield, aun así para futuras situaciones donde sea necesario modificarlo desde la tabla utilizare tu codigo, todo esta solucionado ahora mismo.

Muchas gracias por explicarlo tan detalladamente Gus.

Saludos!

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 6968
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2178
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1588
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 2827
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 2927
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made