20250318 Planteam_AppPedidos_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Hablando de tareas de detectives, poniéndonos ya el colmo de pesquisas, esto ya es lo último que a mí se me ocurre para hacer este método hiper-mega-imposible que se rompa.
00:00:00
¿Se os ocurre alguna otra razón por la que este método podría romper la aplicación? No.
00:00:19
p2 igual a nul imposible
00:00:25
no lo puede romper
00:00:27
p igual a nul no puede
00:00:29
si p no es nul p.setCódigo
00:00:30
no puede romperlo
00:00:33
si p2 no es nul p.setCódigo no puede
00:00:34
y secuenciaCode más más
00:00:37
tampoco puede romperlo, es imposible
00:00:38
conclusión
00:00:40
este método jamás nunca va a hacer
00:00:43
que la aplicación pare ni termine
00:00:45
¿verdad que no?
00:00:46
que alguien modifique accediendo a
00:00:47
a secuenciaCode
00:00:50
por un número negativo
00:00:51
bueno, pero el put se va a hacer
00:00:54
igualmente, o sea, lo que es
00:00:57
parar la aplicación y romperla porque
00:00:59
haya una excepción, un null pointer excepción
00:01:01
un array indesbono excepción
00:01:03
claro, que funcione mal, sí
00:01:04
que funcione mal, sí, que tenga un mal funcionamiento
00:01:06
claro, pero es que efectivamente
00:01:09
para ya evitar el máximo del mal funcionamiento
00:01:11
tendríamos que
00:01:14
verificar que la inserción
00:01:15
se ha hecho, vale, no está mal visto
00:01:17
efectivamente, alguien
00:01:20
puede haber toqueteado
00:01:21
la secuencia, no, más fácil que eso
00:01:24
pedidos
00:01:26
esto te devuelve
00:01:29
el objeto que ha
00:01:32
insertado, ¿verdad?
00:01:34
entonces, pedido
00:01:35
te devuelve
00:01:38
sí, pero
00:01:39
anulreturn
00:01:42
anulreturn
00:01:44
las demás previas a la sociedad
00:01:47
vale
00:01:49
entonces, quiero detectar
00:01:51
que este ha hecho una inserción real
00:01:53
porque si alguien hubiera tocado el código
00:01:55
y ya existiera, el put no habría
00:01:57
funcionado y la interfaz gráfica
00:01:59
se ha creído que lo ha insertado y no lo ha insertado
00:02:01
a ver, los de atrás
00:02:03
Gerardo, cállate
00:02:06
vale
00:02:09
no, estaba hablando
00:02:10
hace
00:02:15
Gerardo es el que le estoy viendo
00:02:17
bueno, pues
00:02:21
igual que tu compañero
00:02:25
vale, a ver
00:02:27
a ver, averiguadme rápido
00:02:29
listillos
00:02:35
que de qué manera puedo averiguar
00:02:37
con el valor de retorno del put
00:02:40
si se ha hecho una inserción real
00:02:41
o no se ha hecho porque el código ya existía
00:02:43
sí, pero no, pero es que lo he hecho a propósito
00:02:46
para que me saliera la ayuda, ahora lo quito
00:02:50
para que me saliera la ayuda
00:02:51
vale
00:02:53
vale
00:02:56
te devuelve
00:03:02
el valor previo
00:03:04
asociado a la key o null
00:03:06
si no había
00:03:08
si ese objeto no estaba
00:03:10
vale, o sea te devuelve null
00:03:12
si no existe
00:03:14
y si existe, te devuelve el que había
00:03:15
previamente
00:03:18
¿vale? eso es lo que me dice aquí ¿o no?
00:03:19
Dios santo bendito
00:03:25
del amor
00:03:37
¿qué?
00:03:39
pero ¿y dónde están tus gafas?
00:03:46
pero tienes que ir
00:03:52
a ver que los informáticos
00:03:53
acabáis todos de gatos perdidos
00:03:57
bueno, así estoy yo, claro
00:03:59
así estoy
00:04:01
yo no veo de lejos
00:04:02
yo no veo de lejos
00:04:06
vale, a ver
00:04:08
el método
00:04:09
silencio
00:04:12
el método put
00:04:16
no, se está sirviendo para recordarlo, no como funciona
00:04:17
put, ya sabéis que
00:04:21
si existe ya un elemento
00:04:23
con esa clave
00:04:25
te lo sustituye
00:04:26
por el nuevo objeto, te lo sustituye
00:04:28
pero te devuelve el antiguo
00:04:30
por si quieres tú hacer algo con el antiguo
00:04:32
te lo devuelve
00:04:34
y si no existía, te devuelve null
00:04:35
¿vale? te devuelve null
00:04:38
si no hay ningún objeto para esa clave
00:04:40
y te devuelve el valor
00:04:43
anterior asociado a esa clave
00:04:45
si ya existía
00:04:46
sí, el propio método put
00:04:47
bueno, pues por eso he entrado
00:04:49
para ver si podemos usarlo
00:04:53
a través de su valor de retorno
00:04:54
para ver si se hizo una inserción
00:04:56
efectiva o no. Vale, pues ya
00:04:57
lo siento
00:05:00
Pablo, vas a...
00:05:02
Bueno, vamos a hacértelo grande. Vale.
00:05:04
Gracias, hombre.
00:05:09
Es lo más bonito que me han
00:05:11
dicho nunca, ¿eh?
00:05:12
Vale, pues entonces
00:05:14
si
00:05:15
pedidos es
00:05:17
igual a nul,
00:05:19
entonces se hizo la inserción
00:05:22
efectiva.
00:05:24
¿Vale?
00:05:25
entonces se hizo la inserción efectiva
00:05:26
lo incrementamos
00:05:28
y devolvemos true
00:05:30
y si no es igual a null
00:05:32
pues entonces
00:05:34
para avisar
00:05:36
de que
00:05:43
de que el pedido ya existía
00:05:45
entonces bueno, a ver
00:05:48
a ver que todo esto ha sido
00:05:50
sí, sí, sí, o sea, por tu culpa
00:05:52
que sí, ya sé que no está bien
00:05:54
porque el pedido se va a acabar
00:05:56
vale, pero esto todo ha sido por tu culpa
00:05:57
porque yo estaba
00:06:00
pero yo estaba preguntando otra cosa
00:06:01
yo estaba preguntando
00:06:04
¿hay alguna razón más por la que esto
00:06:05
podría parar la aplicación, romperla?
00:06:08
no la hay, esto podría hacer un mal
00:06:10
funcionamiento, pero para evitar ese mal funcionamiento
00:06:12
es que se encadenan muchas acciones
00:06:14
ahora que no nos apetece
00:06:16
porque tendríamos que efectivamente deshacer
00:06:18
el put, para que el pedido se quede
00:06:20
avisar de otra manera
00:06:22
porque el falsi se queda muy genérico
00:06:23
entonces esto
00:06:25
que nos ha sugerido, vamos a dejarlo
00:06:27
porque nos desencadena un montón de acciones
00:06:30
no pasa nada, tú darle a control Z
00:06:33
ala, ya está
00:06:35
pero bueno
00:06:39
se te está moviendo el cerebro
00:06:48
que es lo que se tiene que mover
00:06:49
si, supongo que si
00:06:51
si, son muy sanos
00:06:52
si, estáis siguiendo las ideas
00:06:55
de alguna manera
00:07:01
las, vale
00:07:02
bueno pues ya está, este inserpedido
00:07:03
nos hemos detenido un poquito en él
00:07:05
nos hemos detenido un poquito en él
00:07:07
en este inserpedido simplemente pues para ilustrar
00:07:09
que uno a veces
00:07:12
hace un método y se queda tan ancho y luego
00:07:14
ese método que es tan inocente
00:07:16
puede hacer que la aplicación
00:07:17
papapapacasque por un montón de chorradas
00:07:19
entonces no está mal darle un poquito de robustez
00:07:22
y por supuesto
00:07:24
siempre es importante darle un
00:07:25
mecanismo de realimentación al que lo llama
00:07:28
vale, el que lo llama tiene que ir a alguna
00:07:30
realimentación, no puede llamarte
00:07:32
y ser pedido y confiar
00:07:34
en que lo has hecho bien
00:07:36
realimentación boolean o excepción
00:07:37
vale
00:07:40
y aquí la parte de hacerlo robusto
00:07:40
pues se reduce a esto, estas dos cosas
00:07:44
pueden ser null, pues vamos a hacerlo
00:07:46
robusto de tal manera que si es null
00:07:48
oye, falso, no he hecho nada
00:07:49
y si no es null, le pongo
00:07:51
el código al pedido, lo inserto en
00:07:54
los datos
00:07:56
habilito la secuencia y true, vale
00:07:56
y como conclusión, efectivamente
00:07:59
como alguien me esté toqueteando la secuencia
00:08:01
por otros lados, aquí la podemos
00:08:04
haber liado porque este put
00:08:06
habrá sustituido el pedido
00:08:07
esperamos a confiar en que nadie nos toquetea
00:08:09
las secuencias
00:08:11
por lo menos
00:08:12
no, no está en privada
00:08:15
a ver, no, no tiene que tericete
00:08:19
porque es estática
00:08:21
vale, venga, a ver, la pongo
00:08:22
en privada, entonces solo se
00:08:25
puede toquetear desde esta
00:08:27
clase.
00:08:29
Vale, como no he hecho el resto
00:08:32
de la aplicación, puede que sea útil tocarla desde
00:08:33
cualquier otro lado, pero vale.
00:08:35
Tiene sentido que solo la toqueteemos
00:08:37
cuando insertamos. Efectivamente.
00:08:39
Solo cuando insertamos, que es cuando la generamos.
00:08:42
Pues venga, privada, muy bien.
00:08:44
Buen apunte.
00:08:46
Vale. Por lo menos pónmela
00:08:48
en privada. Pues ya te la he puesto en privada.
00:08:49
¿Ya estás contento? ¿Quieres algo más?
00:08:51
No, no quiero nada más.
00:08:52
Venga.
00:08:56
Ya hemos
00:08:58
hecho el create del
00:08:58
crud.
00:09:00
El create del crud está.
00:09:02
El consultar
00:09:05
del crud.
00:09:06
Vale, pues vamos a consultar un pedido.
00:09:08
Vale.
00:09:11
A ver, aquí de nuevo vamos a pensar.
00:09:12
Todo esto no es que haya una solución,
00:09:14
una forma de hacer lo que sea. Esta es la buena.
00:09:16
No. Vamos a hablar,
00:09:19
vamos a pensar en nuestra aplicación,
00:09:21
lo que me han pedido y vamos a decidir, tomar una decisión.
00:09:22
A ver si así sale la aplicación
00:09:25
que el tío quiere. Si no sale la aplicación que el tío
00:09:26
¿Quiénes la cambiamos?
00:09:28
Venga, vamos a pensar.
00:09:30
Cuando alguien desde la interfaz consulte el pedido,
00:09:31
¿cómo nos puede ser interesante que lo consulte?
00:09:35
Pues, hombre, por nombre, porque en los códigos no lo sabe.
00:09:38
A menos que hagamos que por, no, por descripción.
00:09:42
Vale, por descripción.
00:09:50
Sí.
00:09:52
Por descripción es difícil.
00:09:52
Es difícil.
00:09:53
no, no es difícil porque vamos a poner en la
00:09:54
interfaz un desplegable
00:09:56
con todas las descripciones
00:09:59
según tú insertas un pedido
00:10:00
se te añada el desplegable
00:10:02
así ya luego el usuario lo consulta por desplegable
00:10:04
como lo de las películas
00:10:07
porque es que si no efectivamente
00:10:08
una aplicación de consulta o tú consultas
00:10:13
al azar es una locura
00:10:15
yo iría cribando
00:10:16
primero de quién cliente es
00:10:18
claro pero de nuevo
00:10:20
vas con un cliente al azar tendrás que tener un desplegable
00:10:23
con todos tus clientes
00:10:25
pero como aquí no hemos metido cliente
00:10:26
¿verdad que no Ana?
00:10:28
¿a que no hemos metido cliente? pues entonces la consulta
00:10:30
del pedido o por código
00:10:33
o por descripción
00:10:34
entonces, hombre lo ideal sería
00:10:36
por código porque
00:10:39
la clave es código
00:10:40
entonces vamos a hacerle a luz, vamos a hacer que la interfaz
00:10:42
tenga un desplegable
00:10:45
con todos los códigos que se van generando y ya está
00:10:47
vamos a hacerlo así
00:10:49
aunque a lo mejor luego no es lo que quiere
00:10:51
el que nos ha pedido la aplicación
00:10:53
efectivamente
00:10:54
muy bien pensado, vale, pues entonces
00:10:56
vamos a hacer un desplegable
00:10:58
en la interfaz que me puede ser
00:11:01
código de descripción, código de descripción, entonces tú consultas
00:11:02
desplegando, si te salían
00:11:05
solo los códigos sería un rollo, pero si te sale el código
00:11:07
de descripción, ah quiero el pedido de
00:11:08
urgente, va, lo marco, vale
00:11:10
luego, a qué conclusión
00:11:13
llegamos, que ahora
00:11:15
este método tiene sentido
00:11:17
que la consulta, el parámetro que le llegue
00:11:19
perdón, este, sea
00:11:21
el entero
00:11:22
porque vamos a poder recoger el entero
00:11:23
del desplegable de la interfaz
00:11:26
del desplegable de la interfaz yo recojo
00:11:28
todo ese string que he puesto con un split
00:11:30
me saco el codiguito entero
00:11:32
y lo consulto
00:11:33
luego tiene ya
00:11:36
mucho sentido que yo este método de consulta
00:11:38
que voy a llamar desde el listener
00:11:40
me devuelva mi objeto
00:11:42
pedido
00:11:44
partiendo
00:11:45
del código y este código
00:11:50
me lo va a mandar el listener que lo habrá cogido
00:11:52
de mi desplegable
00:11:54
pues hombre, esto en un map
00:11:55
es que ya sabemos lo que es
00:12:00
en un map, esto así
00:12:02
hecho así un poquito
00:12:04
a lo loco
00:12:06
pues sería esto
00:12:07
en un map hecho así a lo loco sería esto de aquí
00:12:10
ahora otra cosa es que efectivamente
00:12:18
nos paremos a pensar en si esto es robusto
00:12:21
puede petar por algún lado
00:12:24
o lo de siempre, si pido ese snus va a petar
00:12:25
pero no vamos a arrastrarlo todo el rato
00:12:28
porque es un rollo
00:12:29
aparte no podemos devolver aquí false
00:12:31
podemos devolver
00:12:33
null, si devuelve null es que no he encontrado
00:12:36
el pedido
00:12:37
entonces vamos a recordar cómo funciona este get
00:12:38
este get
00:12:41
si el pedido existe
00:12:43
te lo devuelve, lógicamente
00:12:45
y si el pedido no existe
00:12:47
creo recordar que te devolvería null
00:12:49
supongo, vamos a recordarlo
00:12:51
vamos a recordar el método get
00:12:53
vamos a recordar el método get
00:12:54
como te funciona
00:12:58
el método get
00:12:59
funciona
00:13:03
devuelve el valor para esta clave
00:13:05
o null si no lo contiene
00:13:08
vale, lo que queríamos saber
00:13:10
luego
00:13:11
el método
00:13:13
nos va a devolver null
00:13:15
si no lo encuentra, pues ya está, pues el listener
00:13:18
si ve que hay un null, pues dirá
00:13:20
no existe pedido
00:13:22
pero bueno, es un poco, existirá
00:13:24
porque si lo hemos sacado del desplegable
00:13:26
el desplegable tiene los que hay
00:13:28
vale y no hay nada más
00:13:29
entonces repito puede fallar
00:13:31
y parar la aplicación si pedidos es null
00:13:34
lo evitaríamos
00:13:36
si pedidos es igual a null
00:13:37
entonces retun null
00:13:40
pondríamos si pedidos es igual a null retun null
00:13:41
en este caso no retun
00:13:44
false lógicamente
00:13:48
vale si el array de pedidos
00:13:50
no existe si el hasmat de pedidos no existe
00:13:56
pues devuelveme un pedido null
00:13:58
no lo ha encontrado lo podemos dejar así
00:13:59
no, si el código no existe
00:14:02
también me devuelve null, me puede devolver null
00:14:06
por dos cosas, porque el hash map
00:14:08
no exista y porque el código no
00:14:10
existe, en cuyo caso el get ya me devuelve null
00:14:12
del desplegable, en este caso
00:14:14
va a existir, si he llamado
00:14:18
a getpedido desde el listener, pero si he llamado a getpedido
00:14:20
desde otra parte de la aplicación
00:14:23
pasándole un código que no exista
00:14:24
bueno, es lo mismo que hemos hecho
00:14:26
aquí, vale
00:14:31
aquí lo único es que
00:14:33
este método
00:14:35
me está avisando de la misma manera
00:14:36
de dos situaciones distintas
00:14:39
tanto si el map no existe
00:14:40
como si el map existe
00:14:43
y no está el pedido
00:14:45
de dos situaciones distintas
00:14:46
me está avisando de la misma manera
00:14:48
devolviendo un null
00:14:50
¿me importa eso?
00:14:52
pues no, no me importa
00:14:55
no me importa
00:14:57
si me...
00:14:59
claro, eso, no funca
00:15:00
no he encontrado el pedido, me da igual que sea
00:15:02
porque la caja no existe o porque no está
00:15:04
en la caja, no entra el pedido
00:15:06
claro, si yo estoy en una situación en la que
00:15:08
tuviera que distinguir, aquí ya sí
00:15:10
que sí o sí tengo que poner la excepción
00:15:12
porque el valor de retorno
00:15:14
nul está usado
00:15:16
para la caja existe pero no está el pedido
00:15:18
con lo cual para la otra
00:15:20
situación, que es la situación la caja
00:15:22
ni existe
00:15:24
tengo que avisar en tu dejo una excepción
00:15:25
¿verdad?
00:15:28
Sí, estoy hablando muy
00:15:29
poniéndolo muy en general porque no sé quién va a llamar
00:15:33
a esto, si mi aplicación la van a toquetear
00:15:35
¿Vale? Estoy hablando
00:15:37
en general de procedimientos
00:15:39
¿Vale? De aspectos muy
00:15:40
generales ¿Vale?
00:15:43
Lo importante es que nos quedemos con eso
00:15:45
que la realimentación que ofrece
00:15:47
el método, la realimentación que ofrece
00:15:49
puede ser, por supuesto
00:15:51
por consola, con un SISO
00:15:53
pero por consola tiene la utilidad que tiene
00:15:55
Si mi aplicación es con interfaz gráfica, ninguna.
00:15:57
Y si no lo es, también poca, porque tiene que haber un tío
00:16:00
ahí mirando.
00:16:01
Desde luego, al código, la realimentación por consola no le
00:16:03
vale para nada.
00:16:05
Vale, luego nos olvidamos de la realimentación.
00:16:06
Las otras dos vías de la alimentación son por el valor
00:16:09
de retorno y porque lance una excepción.
00:16:11
Si yo puedo, a través del valor de retorno,
00:16:14
avisar, dar la realimentación que necesito, maravilloso.
00:16:17
En este caso, en este caso, puedo.
00:16:21
porque ese null
00:16:24
me va a avisar tanto de si la caja
00:16:25
no existe como si existe pero no tiene el código
00:16:28
me vale, pero si yo quiero
00:16:30
realimentar de dos cosas distintas
00:16:32
o incluso de muchas cosas distintas
00:16:34
tengo que empezar a poner excepciones
00:16:36
¿vale? y que cada excepción
00:16:39
me avise de una cosa distinta
00:16:40
tendré que crear el objeto excepción
00:16:42
y hacer aquí el throw
00:16:44
cuando pase eso, y con excepciones
00:16:46
puedo yo realimentar de mil
00:16:48
situaciones diferentes
00:16:50
con el valor de retorno solo de una
00:16:51
Bueno, si yo pongo aquí un throw
00:16:54
cualquier otra excepción, el que lo
00:17:02
me está usando me dirá, cuidado que este método
00:17:04
te puede lanzar la excepción, hoy llueve
00:17:06
y dirás, vale, pero hoy llueve
00:17:08
no tiene que ver con que no exista el pedido
00:17:10
entonces, hombre, no es una buena manera, pero sí
00:17:12
te estaría avisando de que algo ha pasado
00:17:14
pero de lo que
00:17:16
ha pasado no sabes, entonces
00:17:18
tal ahora tú de capturarla, ¿cómo la capturas?
00:17:20
¿sacando el paraguas? Pues no
00:17:22
lo que no era la lluvia lo que me importaba
00:17:24
vale
00:17:26
nunca ahorres tiempo en la vida
00:17:27
vale
00:17:32
ya tenemos la consulta por código
00:17:34
actualizar un pedido
00:17:36
actualizar un pedido
00:17:37
sería un método
00:17:40
ahora de nuevo pensamos cuando puede querer
00:17:42
el usuario de mi aplicación al que yo le estoy
00:17:44
vendiendo es actualizar un pedido en que contexto
00:17:46
bueno pues
00:17:48
por ejemplo vamos a
00:17:50
Por ejemplo
00:17:51
Ya, uh, no, pero esa es muy
00:17:55
Sí, añadirte un boli
00:17:58
Vale, entonces podemos hacer
00:18:00
O bien actualizar pedido
00:18:02
O bien, porque haya cambiado la descripción
00:18:04
Pero va, vamos a dejar esa
00:18:05
O bien añadir un producto nuevo, que puede tener más interés
00:18:07
¿Vale?
00:18:09
O quitar un producto
00:18:13
Ya, pero es que entonces el audaz de producto
00:18:14
Los parámetros que va a recibir
00:18:16
Tenemos que hacer varios
00:18:18
pero le obligas al listener
00:18:20
o al método que sea a pasar la lista
00:18:24
vamos a hacer una versión más sencilla
00:18:25
que no complique la aplicación
00:18:28
si, si, si, yo creo que debería
00:18:29
a ver
00:18:32
los de atrás
00:18:34
lo están siguiendo
00:18:36
vale
00:18:38
pues venga, vamos a pensar
00:18:41
a ver
00:18:43
vamos a pensar
00:18:46
esto es una decisión que tomamos
00:18:49
no es que tenga que ser así, una decisión
00:18:51
acorde con el que nos ha pedido
00:18:53
la aplicación, vamos a sentarnos
00:18:55
a decidir, cuando tú actualices
00:18:57
un pedido, ¿a qué te refieres?
00:18:59
y él nos va a decir, solamente
00:19:02
añadirle un producto, quitarle nunca jamás
00:19:03
porque hombre, vaya pérdida de dinero
00:19:06
¿vale? entonces ya nos hemos sentado
00:19:07
con él, nos ha dicho, para mí actualizar un
00:19:09
pedido va a ser añadirle un producto
00:19:11
¿vale? pues como ya nos ha dicho eso
00:19:13
ahora ya hacemos el método, ya tenemos la información
00:19:15
pues venga, el método de actualizar
00:19:18
tiene sentido
00:19:20
que sea, vamos a ponerle
00:19:24
por ahora void, bueno
00:19:26
y luego ya cambiamos
00:19:27
la realimentación a lo que queramos
00:19:29
update product
00:19:31
vale, que pedido
00:19:33
perdón, update pedido
00:19:37
perdón, perdón, perdón
00:19:39
vale, datos que necesita el método
00:19:40
pedido actualizar
00:19:43
su código
00:19:45
el código de pedido actualizar
00:19:47
y el producto nuevo
00:19:51
porque actualizar pedido
00:19:53
hemos quedado que solo es para esto
00:19:57
solo es para eso, para nada más
00:19:59
si no tendríamos que hacer más métodos
00:20:01
o un método con diferentes parámetros y que
00:20:05
él distinga dentro los que sean y los que no
00:20:07
y hacerlo, muchas opciones
00:20:09
que no queremos
00:20:10
vale, bueno, pues entonces que tenemos que hacer
00:20:12
esto ya lo sabréis
00:20:15
hacer, ¿no? sacar el pedido con ese código
00:20:17
al pedido con ese código
00:20:19
añadirle el producto
00:20:21
y ahora ya volver a meter ese
00:20:22
producto en el map
00:20:25
vale, pues vamos a sacar el
00:20:27
vamos a sacar
00:20:29
el pedido con ese código
00:20:31
mi pedido
00:20:33
p es
00:20:35
el pedido con este código
00:20:36
que raro que no me ofrezca
00:20:41
código ahí, bueno
00:20:44
sí, pero lo tiene arriba y luego
00:20:45
encima tiene un entero, que raro que no me lo haya
00:20:53
ofrecido, vale, tengo el pedido
00:20:55
ahora, a su lista
00:20:57
de productos
00:20:59
a esta lista
00:21:01
le vamos a añadir el producto
00:21:02
nuevo, vale
00:21:05
y ahora
00:21:08
necesitaríamos
00:21:15
volver a poner el producto
00:21:20
en el map
00:21:22
esto es necesario
00:21:23
esta sentencia
00:21:26
es necesaria
00:21:34
esta
00:21:36
P es la referencia
00:21:40
no he cambiado la referencia
00:21:51
esto, el map
00:21:52
tiene la clave y el objeto
00:21:56
¿y un objeto qué es? su referencia
00:21:59
pues yo a través de la referencia he modificado lo que contiene
00:22:01
pero la referencia o lo que es lo mismo el objeto
00:22:05
es el mismo, no ha cambiado
00:22:08
claro, con lo cual esta sentencia
00:22:09
no es necesaria
00:22:12
otra cosa es que yo cambiara
00:22:13
¿vale? el objeto
00:22:16
y fuera otro objeto con otra referencia
00:22:18
¿vale?
00:22:21
entonces sí
00:22:23
vale, pues entonces ahora de nuevo
00:22:23
realimentación, este método necesita realimentación
00:22:31
perdón
00:22:34
bueno, a ver
00:22:35
pues si algo falla, podemos avisar con un boolean
00:22:37
lo suyo sería poner el boolean
00:22:40
¿qué puede fallar? de nuevo
00:22:42
que pedido sea null
00:22:43
o puede fallar
00:22:44
que esto sea null
00:22:46
porque no tenga productos
00:22:48
pero hombre, eso no va a ser null nunca
00:22:51
porque yo aquí ya la inicializo como vacío
00:22:53
entonces
00:22:55
perdón, la inicializo como un array list nuevo
00:22:57
entonces que
00:22:59
esto sea
00:23:01
que pedido sea null
00:23:03
o bueno, podemos arrastrarlo como siempre
00:23:04
y devolver, pero vamos a dejar
00:23:07
venga, para que no parezca
00:23:09
que luego
00:23:11
lo miráis
00:23:12
si es que lo miráis y decís
00:23:15
aquí porque lo pone y aquí porque no
00:23:16
y no os acordáis de lo que hemos dicho
00:23:18
pues entonces venga lo ponemos
00:23:20
y así no entráis en colisión
00:23:22
vale
00:23:23
si la caja está vacía me devuelve
00:23:27
falso porque entonces no habrá podido modificarlo
00:23:35
y si la caja no está vacía
00:23:37
aquí
00:23:41
hay otro fallo
00:23:44
importante
00:23:47
Que el tío me haya dado un código que no existe
00:23:47
Si me ha dado un código que no existe
00:23:50
Esto es null
00:23:52
Y si esto es null, aquí hay un pedazo null pointer exception
00:23:53
Claro, entonces
00:23:57
Si p
00:23:59
Es igual a null
00:24:00
Me voy de aquí
00:24:02
Corriendo, porque si no me sale
00:24:04
Un null pointer exception impresionante
00:24:06
Y si p no es null
00:24:09
Ya lo actualizo
00:24:11
¿Vale? Entonces este método me va a devolver
00:24:12
False si no ha podido hacer la actualización
00:24:15
por la razón que sea. Porque no hay caja
00:24:16
de pedidos. Porque había caja, pero el pedido
00:24:18
no estaba. Si me devuelve nulo
00:24:20
es que esto no se ha hecho.
00:24:22
Y si no me devuelve nulo es que se ha hecho.
00:24:24
Perdón, true o false.
00:24:26
Perdón, perdón.
00:24:28
¿Por qué?
00:24:30
¿Qué he hecho?
00:24:32
No, porque...
00:24:33
Solo uno.
00:24:34
Buf, vais a ver
00:24:38
métodos con 2.000 millones de retunes.
00:24:39
Que no digo que estén bien.
00:24:41
Que no sea una práctica de programación buena.
00:24:43
estos son break, poner break es a mogollón
00:24:45
poner break es a mogollón no es una buena práctica
00:24:46
de programación, es ir saliendo con break
00:24:49
no hay nada más
00:24:51
opuesto a la programación estructurada que los break
00:24:53
porque desestructura
00:24:55
tú puedes salir por cualquier lado, la idea de la programación estructurada
00:24:57
es que tú tengas un camino en el que entras por un lado
00:24:59
y sales por el otro, punto pelota
00:25:01
y aquí estamos saliendo
00:25:03
en absoluto
00:25:04
nos queremos muchísimo
00:25:07
no me peleo nada
00:25:08
bueno pues
00:25:09
en sus exámenes le hacéis caso
00:25:16
ella hace lo mismo
00:25:19
en cualquier caso yo no
00:25:19
contradigo lo que ella dice
00:25:22
lo que ella dice está correcto
00:25:24
la programación estructurada
00:25:26
cuanto menos break y retún tenga mejor
00:25:27
pero luego uno vive y sobrevive
00:25:29
y os vais a encontrar de todo
00:25:32
hacer esto sin retornar
00:25:36
de alguna manera
00:25:37
hombre pues lo natural sería
00:25:39
aquí un boolean
00:25:42
result
00:25:44
igual a lo que fuera
00:25:45
a true
00:25:47
y aquí en lugar de
00:25:48
return
00:25:52
result
00:25:52
result igual false
00:25:54
y aquí abajo lo mismo
00:25:58
result
00:25:59
igual false
00:26:02
y ahora aquí return result
00:26:04
y punto pelota
00:26:05
esta es la forma bonita
00:26:06
¿vale?
00:26:09
tú tienes un único punto de salida
00:26:11
este es tu punto de salida
00:26:13
¿pero tienes que poner el otro dentro de un it return?
00:26:14
no
00:26:17
¿no?
00:26:17
o sea
00:26:20
¿como que no sales?
00:26:20
yo salgo por return
00:26:24
y puede ocurrir dos cosas, que result sea true
00:26:25
porque todo ha ido bien
00:26:28
o que sea false porque ha ocurrido una de estas dos
00:26:29
me refiero a que si
00:26:31
igual se va a ejecutar
00:26:32
Claro, se va a ejecutar igual, no es como antes.
00:26:34
Ah, vale, vale, vale, que tengo que meter esto en...
00:26:36
Sí, sí, sí, claro, sí, sí, sí, o meterlo en los dos de arriba, sí, sí, sí, sí, sí, claro.
00:26:39
Si result es...
00:26:45
Si result, entonces ya está.
00:26:51
Y ahora el pedido P también, el result.
00:26:55
¿Qué pedido P?
00:26:59
El de arriba, pedido P, igual pedido después.
00:27:01
Ah, este pedido de aquí
00:27:04
que no lo veía, sí
00:27:07
Vale, conclusión
00:27:08
y como aquí estoy declarando
00:27:12
encima
00:27:15
pues encima tengo que pedir aquí
00:27:15
una llave
00:27:20
porque estoy haciendo aquí la declaración
00:27:21
entonces tengo que
00:27:27
vale, a ver
00:27:28
claro, con lo cual
00:27:30
esto
00:27:32
claro, a ver, tendría que cambiar
00:27:33
el código para que quedara un poco más bonito
00:27:37
porque así ya es
00:27:38
entonces
00:27:40
vale, esto está más estructurado
00:27:43
tendríamos que hacer algún
00:27:48
podríamos hacer algún arreglito con estos
00:27:50
para que no quedaran tantos
00:27:52
habría que hacer
00:27:53
más feo, pero
00:27:55
lo otro, y de hecho
00:27:58
Python
00:27:59
que está orientado a facilitar
00:28:01
la vida y que sea todo muy sencillo
00:28:04
tan sencillo que es que eso
00:28:06
es un desastre de lenguaje
00:28:08
porque ahí ni se declara nada
00:28:10
ni hay tipos de datos, que un tipo de repente
00:28:12
metes otra cosa, él se adapta a lo que sea
00:28:14
todo, todo, o sea es terrorífico
00:28:16
entonces como te deja hacer todo
00:28:18
entonces está muy bien, te deja hacer
00:28:20
todo, él va decidiendo
00:28:22
que burrada has hecho, yo te lo apaño
00:28:23
en fin, es un desastre, para aplicaciones
00:28:25
no es un desastre, para aplicaciones
00:28:28
en realidad empresariales, por eso sobre todo
00:28:30
se hacen con Java, porque al ser un poquito
00:28:32
más rígido, pues es más difícil
00:28:34
que la cagues. Bueno, pues en Python
00:28:36
que ha sido una tendencia
00:28:38
hacia facilitar
00:28:41
en Python, sin embargo
00:28:42
todo se hace con break, prácticamente
00:28:44
o sea, ha vuelto el break a nuestras vidas
00:28:46
porque facilita
00:28:48
un poquito, pero en origen
00:28:50
en origen se desterró cuando
00:28:52
se inició la programación estructurada
00:28:54
pero es cierto que, jolín
00:28:56
Me queda un poco de pereza, ¿no?
00:28:58
Evitar los return y los break.
00:28:59
Así que os vais a encontrar de todo.
00:29:02
Pero lo que os dice Rosa es cierto.
00:29:04
Luego vosotros tenéis que hacer las cosas
00:29:06
como creáis que vais a ganar más dinero.
00:29:08
Vale.
00:29:12
Entonces, yo, de hecho,
00:29:16
no se lo digáis a Rosa,
00:29:18
pero lo voy a dejar como lo tenía
00:29:20
porque es que tantas líneas
00:29:22
me están dando ansiedad.
00:29:24
vale, yo lo voy a dejar así
00:29:28
pero es feo
00:29:35
pero es más fácil de ver
00:29:36
vale
00:29:39
y chat GPT
00:29:40
chat GPT programa así
00:29:43
chat GPT pasa la aplicación
00:29:45
estructurada completamente
00:29:47
chat GPT todo lo que puede hacer con
00:29:48
break y con return lo hace con
00:29:51
break y return
00:29:53
bueno
00:29:54
Vale, pues ya hemos actualizado
00:29:56
Preguntárselo a ella
00:29:59
Qué opinión tiene de mí
00:30:03
Y preguntadme a mí
00:30:04
Qué opinión tengo de ella
00:30:06
La mía de ella es buenísima
00:30:07
Y estoy convencida que la suya de mí también
00:30:09
Venga
00:30:11
Bueno, pues
00:30:13
Nos llevamos estupendamente
00:30:18
Porque es una persona estupenda
00:30:19
Es que realmente no hay nada que
00:30:21
Bueno, venga, seguimos
00:30:22
borrar
00:30:26
además si no fuera así
00:30:28
no lo diría porque estoy grabando
00:30:30
pero
00:30:32
pero es así
00:30:33
venga, terminamos con el borrado
00:30:36
que no, no, no, es completamente en serio
00:30:39
es completamente en serio
00:30:42
borrar
00:30:45
borrar un pedido, borrar un pedido es lo más fácil
00:30:46
o el tío quiere borrar un pedido
00:30:48
pues ya está, seleccionará
00:30:51
en su desplegable
00:30:53
y el que seleccione borrado
00:30:53
luego por código
00:30:56
este sí que es lo más fácil
00:30:57
del mundo
00:31:05
porque me he equivocado
00:31:05
para los errores de los demás
00:31:08
estáis muy despiertos
00:31:13
vale
00:31:14
pues borrar un pedido pues ya está
00:31:17
es que luego nos dice
00:31:19
¿qué voy a usar en este código?
00:31:20
vale
00:31:25
pues remove
00:31:25
código
00:31:27
y anda
00:31:28
para reutilizar, para utilizar el boolean
00:31:31
este famoso
00:31:33
pues hacemos esto de aquí
00:31:34
ala
00:31:37
ya está
00:31:41
pedidos remove
00:31:47
a ver, puede ocurrir que no existiera
00:31:50
si no existiera el remove
00:31:52
como funciona, que me devuelve remove
00:31:53
si no existe el código, vamos a verlo
00:31:56
remove
00:31:58
devuelve la clave del que ha borrado
00:32:00
devuelve null
00:32:04
si no contenía la clave
00:32:12
vale, pues entonces
00:32:14
le podemos hacer también
00:32:15
if pedidos remove código
00:32:17
es igual a null
00:32:25
es que no lo pudo borrar porque me devolvió null
00:32:27
entonces en ese caso
00:32:29
un tercer return falso
00:32:31
y si llegamos hasta aquí abajo, retontro.
00:32:33
Sería interesante
00:32:38
en cuanto nos vuelva a venir algún chaval
00:32:40
de estos que programa por ahí
00:32:43
que está trabajando en una empresa
00:32:45
programando y haciendo proyectos
00:32:48
preguntarle qué se encuentra él
00:32:49
y qué es lo que suelen hacer.
00:32:52
Vale, venga, pues ya está.
00:32:56
Tenemos todas estas tareas
00:32:58
con estos datos.
00:33:01
Y ahora ya habrá una interfaz
00:33:04
que llame a los
00:33:06
métodos, nos
00:33:08
falta aquí en estos métodos ponerle un modificador
00:33:10
maravilloso o no
00:33:12
no nos falta esto
00:33:13
claro sería
00:33:16
lo suyo ponerle un static a estos métodos
00:33:18
para poder llamarlo luego cómodamente
00:33:20
desde el listener
00:33:22
nos falta aquí unos static
00:33:23
increíbles
00:33:25
delete esta
00:33:27
con su static
00:33:34
Claro, pero a la vez lo estoy ejecutando.
00:33:36
Claro, claro.
00:33:48
Estoy haciendo la sentencia y además estoy recogiendo el valor de retorno para compararlo con el null.
00:33:50
Vale.
00:33:56
Pues, claro, porque está en la única variable con la que trabajan es esta que es estática
00:33:58
y esta que es estática, solo trabajan con esa
00:34:05
entonces, y ahora ya nos podemos
00:34:08
plantear hacer la aplicación que gestiona y usa
00:34:10
estas cosas, que puede ser que nos haga falta
00:34:12
otros métodos útiles, pues los metemos
00:34:13
lo que sea, pero estos yo los ponía como
00:34:15
ejemplo de los métodos que siempre se recogen
00:34:18
en una clase de acceso a datos
00:34:19
que son estos de aquí
00:34:22
a través, bueno
00:34:23
con otra estructura normalmente y otras cosas
00:34:26
pero bueno, la idea es la misma
00:34:27
lo que hay
00:34:28
lo que
00:34:32
sí, lo que hay es
00:34:34
unas herramientas estupendas
00:34:35
unos frameworks, unas clases que si tú configuras
00:34:37
le pones
00:34:40
insert pedido
00:34:43
se adapta a tu base de datos
00:34:44
te genera el código y te hace absolutamente todo
00:34:46
con lo cual tú lo tienes que programar
00:34:48
eso sí, tienes que entender perfectamente
00:34:49
bien cómo funcionan y saber configurarlas
00:34:52
porque si no estás perdido
00:34:54
y chat GPT en ese caso
00:34:57
no es de mucha ayuda, porque ahí sí que dependemos
00:35:00
completamente de las versiones
00:35:02
con las que estemos trabajando
00:35:04
y ahí sí que se vuelve loco
00:35:05
con el tema de las versiones, de las dependencias
00:35:06
de clases, de no sé qué
00:35:08
son muchas cosas
00:35:10
claro, no tiene todas las actualizaciones
00:35:12
y llega un momento
00:35:18
en que ya te dice
00:35:21
mira, deja de preguntarme porque es que no te lo voy a conseguir
00:35:22
alguna vez responde eso
00:35:24
sí, burradas sí
00:35:27
luego te pido perdón
00:35:30
pero incluso hay veces que te dicen
00:35:32
mira
00:35:33
Sí, pero hay veces que reconoce
00:35:34
Que no te va a poder ayudar
00:35:39
Y te dice, mira, realmente es que estoy perdido con esto
00:35:39
Porque le falta información
00:35:42
Claro, normal, le faltan los datos
00:35:44
Con lo cual el año que viene
00:35:45
No vais a poder usarlo
00:35:48
Para todo, solo para algunas cosas
00:35:49
Gemini
00:35:51
Otro, ¿qué me has dicho?
00:35:55
Pues ahora ya
00:35:58
Ahora ya tendríamos que hacer
00:36:01
la vista de esta aplicación que es la interfaz
00:36:04
y ahora ya esto es un rollo porque
00:36:06
habría que decidir, ¿qué componentes
00:36:07
queremos? Entonces, pues
00:36:09
para insertar, pues campos de texto
00:36:11
para descripción y no sé qué, vale
00:36:13
para añadir
00:36:15
producto, ¿tenemos un añadir producto a pedido?
00:36:17
Pues a través
00:36:21
de UDATE pedido, cada vez que
00:36:21
le damos a UDATE pedido, le estamos
00:36:23
añadiendo producto nuevo, entonces nuestra
00:36:25
interfaz, ¿qué va a necesitar?
00:36:28
Sí, las áreas de texto
00:36:31
que hagan falta, un desplegable
00:36:33
para mostrar todos
00:36:36
los códigos según vas haciendo los
00:36:37
insert, pues ahora entonces
00:36:39
ahora ya, este
00:36:41
es vuestro trabajo de arranque ahora mismo
00:36:43
hacer el frame
00:36:45
decidir que componentes
00:36:47
necesitáis para
00:36:50
insertar los datos, mostrar
00:36:51
los datos, recuperarlos
00:36:54
¿vale?
00:36:56
y actualizarlos que en ese caso
00:36:58
añadir el, entonces
00:36:59
por ejemplo, una forma de organizarlo
00:37:01
en este caso quizá no hace tanta falta
00:37:04
porque no son muchos datos
00:37:06
los que tenemos, pero una forma
00:37:08
de organizarlo, podríamos hacerlo con paneles tabulados
00:37:10
con diferentes paneles, no ponerlo todo
00:37:12
mogollón en un panel, por ejemplo
00:37:14
vamos a hacernos la vista de esta aplicación
00:37:16
pues nos hacemos
00:37:18
un frame
00:37:19
nos hacemos un
00:37:20
yo que estoy haciendo
00:37:34
vale
00:37:37
un frame
00:37:41
app pedidos
00:37:42
vale
00:37:45
pues nuestro frame
00:37:52
que es este
00:37:54
vale, pues podríamos ya ponerle una barra de menús arriba
00:37:55
pero esa la vamos a hacer
00:38:03
cuando hagamos una aplicación
00:38:04
pues cuando hagamos un procesador de texto, por ejemplo
00:38:07
que podamos hacer archivos para cargarlos
00:38:08
para no se que, entonces lo dejamos para ahí
00:38:10
podemos meter
00:38:11
para que tengáis algún componente más
00:38:12
no vamos a perder mucho el tiempo en esto
00:38:16
pues por ejemplo paneles tabulados
00:38:17
yo tengo insertar
00:38:19
modificar, pues poner cada cosa
00:38:22
en un panel distinto y así no tengo que
00:38:24
tener todos los datos a mogollón, que el usuario
00:38:26
igual se vuelve loco. Vale, pues
00:38:28
¿cómo hacer diferentes paneles
00:38:30
que cada uno tenga asociado a una pestañita
00:38:32
o te mueves uno a otro?
00:38:34
Pues
00:38:36
Sí, hombre
00:38:37
sale un montón de aplicaciones
00:38:40
por ejemplo, aquí
00:38:41
me refiero a esto
00:38:43
por ejemplo, imagínate que hacemos esto de aquí
00:38:45
a esto
00:38:51
tú tienes aquí diferentes
00:38:56
paneles, cada panel se ocupa
00:38:58
de una cosa y esto podría
00:39:00
estar todo metido en lo mismo, pero sería más
00:39:01
complicado para el usuario, mejor si cada panel
00:39:03
tiene aquí una pestañita
00:39:06
distinta y tú vas cambiando donde lo quieras hacer
00:39:08
pues a esto me refiero
00:39:10
entonces tendríamos un panel para insertar, otro para
00:39:11
hacer consultas, otro para hacer, entonces si la aplicación
00:39:13
va creciendo y se va complicando lo de insertar
00:39:16
o lo de consultar se va
00:39:18
complicando porque puedes consultar por varios parámetros
00:39:19
pues así no vas a añadir
00:39:22
todo al mismo panel, lo añades a paneles separados
00:39:23
cada parte, ¿vale?
00:39:25
Bueno, pues esta
00:39:27
chorrada de los paneles.
00:39:28
Pues bueno, primero a nuestro panel gordote
00:39:34
le ponemos el
00:39:37
absoluto, que no se nos olvida.
00:39:38
Y ahora,
00:39:42
tiene que haber
00:39:43
un superpanel
00:39:45
que es el que luego acoge
00:39:46
los paneles pequeñitos.
00:39:49
Y ese superpanel es el
00:39:50
JTABETPAN, es ese de ahí.
00:39:52
Pues venga,
00:39:55
J-Tablet panel.
00:39:57
Lo hacéis, pues, lo adaptáis al tamaño que queráis.
00:40:04
El panel grandote.
00:40:08
J-Tablet panel.
00:40:10
Es el.
00:40:11
En containers.
00:40:12
Está en containers, no en componentes.
00:40:14
En contenedores está.
00:40:16
¿Vale?
00:40:18
Sí te sale en containers.
00:40:20
En containers está el cuarto.
00:40:22
Bueno.
00:40:27
No. Lo hacéis grande
00:40:28
que sabéis.
00:40:30
No tengo ni idea.
00:40:31
Pues tira de ahí.
00:40:34
Vale.
00:40:37
Y ahora ya, este todavía no es
00:40:38
un panel para coger componentes. Ahora a este
00:40:40
ya le ponemos tantos paneles como queramos.
00:40:42
Pues ahora ya vamos arrastrando tantos paneles
00:40:44
como queramos. Por ejemplo, cogemos un Jpanel.
00:40:46
Un Jpanel es el panel básico.
00:40:48
Lo cogemos y lo
00:40:50
arrastramos ahí hasta donde se nos pone
00:40:52
la rayita roja gorda.
00:40:54
¿Vale?
00:40:57
Y ya nos ha aparecido un nuevo panel.
00:40:58
Claro, veis, tiene que aparecer debajo de este.
00:41:01
Aquí lo natural sería que le cambiéis, lógicamente,
00:41:05
el nombre de la pestaña, que queda muy fea.
00:41:09
Pues, os vais a propiedades del panel.
00:41:12
Le podríamos cambiar el nombre de la variable para que fuera
00:41:15
más cómodo.
00:41:17
Panel insertar, por ejemplo.
00:41:18
Y ahora, abajo en propiedades, pues,
00:41:20
el valor de la pestañita en tab properties.
00:41:23
Pues la pestañita en lugar de new tab, pues insertar, por ejemplo.
00:41:28
¡Hala!
00:41:37
Despliega tab en properties del panel.
00:41:39
Y ya está.
00:41:46
Y ahora, otro panel más.
00:41:47
Lo arrastramos al panel gordote.
00:41:49
Tenemos que tener seleccionado al gordote.
00:41:51
Lo arrastramos al gordote.
00:41:53
¡Hala!
00:41:57
Hasta que nos aparezca la raya del gordote
00:41:57
Ya tenemos otro
00:42:00
Panel
00:42:02
Borrar
00:42:08
Vale, le cambiamos la pestaña
00:42:13
Eliminar
00:42:23
Vale
00:42:32
Las podéis cambiar el orden
00:42:33
Las movéis si queréis que aparezca en otro orden
00:42:36
ponemos el de
00:42:38
modificar
00:42:44
espérate, este no me lo ha puesto bien
00:42:46
jPanel
00:42:48
ay, joder
00:42:50
si no tenéis seleccionado el
00:42:51
panelado, no sé
00:42:54
joder, que no quiero esto
00:42:56
vale, a ver
00:42:59
ahí
00:43:01
arriba
00:43:02
arriba
00:43:03
a la derecha del guión
00:43:04
pero y porque aquí no me lo
00:43:06
antes juré, vale
00:43:08
vale
00:43:10
pues este va a ser
00:43:12
el de
00:43:14
actualizar, añadiendo un pedido
00:43:16
nuevo, en este caso
00:43:18
es para lo único que usábamos
00:43:20
actualizar, para añadirle un pedido nuevo
00:43:24
eso nos facilita
00:43:26
que el insertar sea solamente por descripción
00:43:28
insertamos un pedido por descripción solamente
00:43:30
si hubiéramos añadido el cliente
00:43:32
los clientes que han hecho un pedido
00:43:36
pues claro, aquí ya se complicaría con un montón de controles
00:43:37
y de cosas
00:43:40
pero hemos hecho la versión corta
00:43:41
que tampoco es tan corta
00:43:43
pero
00:43:47
vale, y esta era
00:43:48
actualizar
00:43:51
y nos falta consultar
00:43:53
vale, aquí
00:43:59
lo único es
00:44:20
que
00:44:22
tanto eliminar como actualizar
00:44:23
como consultar, como se van a hacer por código
00:44:27
tienen que tener
00:44:29
el desplegable con todos
00:44:31
entonces podemos hacer un desplegable
00:44:33
en cada panel
00:44:36
uno aquí, otro aquí, otro aquí
00:44:36
en cada panel un desplegable
00:44:40
o a lo mejor
00:44:41
esto ya va en gusto
00:44:44
si uno lo quiere hacer, pues pone el desplegable
00:44:45
fuera
00:44:47
ponemos el desplegable aquí fuera
00:44:48
mucho mejor y así nos replicamos
00:44:51
ese desplegable en los tres paneles
00:44:54
entonces pues aquí lo ideal es que
00:44:55
hubiera un combo box
00:44:57
o podéis explorar
00:44:59
un JList
00:45:03
un JList
00:45:04
es el componente este
00:45:06
que es como un área de texto pero que te
00:45:08
permite
00:45:10
bueno
00:45:10
es otra forma de
00:45:15
bueno el JList tiene un modelo
00:45:17
que tú, a ver, no es que haya muchas diferencias
00:45:22
pero
00:45:24
es más habitual y es más
00:45:25
cómodo de manejar
00:45:28
sería lo ideal que lo averiguarais
00:45:30
que lo investigarais con un JList
00:45:32
A ver si, por ejemplo, un JLIS, el Eclipse seguro que usa un JLIS en alguna de las cosas que tiene por aquí.
00:45:33
A ver si yo pongo aquí propiedades, por ejemplo.
00:45:42
Es un JLIS de la parte de la mejor de la vida del mundo.
00:45:51
Espera, bueno, vamos a buscar la imagen en internet y ya está.
00:45:55
Jolín con la Wi-Fi nueva.
00:46:13
Vale.
00:46:32
JList
00:46:36
Java
00:46:37
Swing
00:46:38
Vale, el JList
00:46:39
es este componente
00:46:43
en lugar de
00:46:46
aparecerte en un desplegable, te aparece en un área
00:46:48
como esta
00:46:50
¿Vale?
00:46:50
Claro, un JList es esto
00:46:54
y tú seleccionas
00:46:56
aquí el que quieres
00:46:58
y también tienes su evento asociado
00:46:59
o puedes, ¿vale?
00:47:02
Tú seleccionas y luego le das al botoncito
00:47:03
Quiero borrar este
00:47:05
O quiero eliminar
00:47:06
Pues o bien en un combo box
00:47:08
O bien en un JLIS aparecerán todos los IDs
00:47:10
Con la descripción
00:47:13
¿Vale?
00:47:14
Entonces esta aplicación
00:47:17
Que era para agregar un nombre
00:47:19
Pues ese nombre se podía haber agregado en combo box
00:47:20
Y ya está, y luego seleccionas del combo box
00:47:23
Y la diferencia
00:47:25
Es que el JLIS lo ves todo como más claro
00:47:27
Porque es que lo tienes ahí abierto y lo ves todo
00:47:29
El combo box tienes que desplegarlo
00:47:31
¿Y el combo box cómo puedes hacerlo?
00:47:32
A ver, en el combo box lo ideal es que le añades
00:47:34
solamente los string y ya está, no lo cargues
00:47:47
con todo el objeto, claro
00:47:48
al combo box le añades solo el string que tú has construido
00:47:50
en base al código y la descripción
00:47:53
ya está, entonces
00:47:54
hacedlo para probar este
00:47:56
componente que es quizá más habitual
00:47:58
que el desplegable en las aplicaciones
00:48:00
pues un JList, vale, entonces
00:48:03
Entonces uno de estos tiene que aparecer aquí, un JList, aquí queremos un JList en el que
00:48:04
vayan apareciendo todos los pedidos que vamos insertando.
00:48:35
Ese JList automáticamente lleva asociado a una barrita.
00:48:40
Entonces, si se salen del espacio,
00:48:44
va a aparecer esa barrita para moverte por él.
00:48:45
Entonces, cuando le demos a eliminar,
00:48:48
seleccionaremos el este.
00:48:50
Lo que pasa es que ahora se nos ha quedado el panel de eliminar
00:48:52
y consultar, se nos han quedado vacíos,
00:48:54
porque no hay nada que poner en él.
00:48:57
Porque eliminar, seleccionaremos esto,
00:48:59
el botón, como mucho, botón eliminar, nada más.
00:49:01
Y consultar, bueno, consultar tendrá el área de texto
00:49:04
para la descripción y para los pedidos y para todo eso.
00:49:08
Para la lista de productos.
00:49:12
La lista de productos y el botoncito
00:49:12
de consultar.
00:49:14
Eliminar es el que se nos ha quedado con un botón solo.
00:49:16
Si tenemos aquí...
00:49:19
Se podría poner
00:49:20
eliminar aquí abajo, por ejemplo.
00:49:24
Sí, podemos quitar este panel.
00:49:28
El panel de eliminar, efectivamente.
00:49:30
El panel borrar
00:49:32
fuera.
00:49:34
Este panel...
00:49:36
No me deja borrarlo desde aquí.
00:49:38
suprimir
00:49:44
no me deja borrarlo
00:49:45
ah, que se me ha colgado
00:49:48
el builder es un auto
00:49:53
bueno, pero sabéis la idea
00:49:56
debajo del JList
00:49:59
debajo del JList
00:50:02
ponéis un propio botón
00:50:04
eliminar debajo del JList
00:50:06
y que eliminar sea con este botón
00:50:07
eliminar y ya está
00:50:09
y los paneles sean solamente para insertar
00:50:11
actualizar y consultar
00:50:14
eliminar botoncito de abajo
00:50:15
y los tres paneles que quedan
00:50:19
son esos para el resto
00:50:21
venga pues ya está
00:50:22
esta aplicación es la que tenéis que completar
00:50:24
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 10
- Fecha:
- 21 de marzo de 2025 - 10:55
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 50′ 32″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 212.00 MBytes