1 00:00:00,300 --> 00:00:06,240 vamos a grabar esta clase por lo tanto si me dais si habláis ya me dais consentimiento para grabar 2 00:00:06,240 --> 00:00:14,679 vuestra voz vale entonces vamos a intentar hacer un programita como este la idea es que hay una 3 00:00:14,679 --> 00:00:21,760 pregunta graciosa si vais sobre el no funciona vale si vais sobre el sí el programa modifica 4 00:00:21,760 --> 00:00:28,660 la posición del sí vale para que no podáis darle no sé por qué esto probablemente porque está detrás 5 00:00:28,660 --> 00:00:34,899 desde aquí ya no lo pilla, no lo puedo ni clickear ni nada, pero la idea es más o menos eso. La idea es 6 00:00:34,899 --> 00:00:44,859 jugar un poquito con los botones, con los controles. Entonces, vamos a crear un nuevo proyecto. 7 00:00:44,859 --> 00:01:13,900 entonces empiezo con lo de siempre vale le tengo que añadir aquí 8 00:01:13,900 --> 00:01:29,510 aquí le tengo que crear aquí un nuevo oficiero 9 00:01:29,510 --> 00:01:47,530 un file que sea mi lista o gui.fxml le pongo aquí una nueva clase que será el 10 00:01:47,530 --> 00:01:58,969 el controller para que sustantivamente aquí haya los métodos ya que estoy le pongo un método ficticio 11 00:02:03,879 --> 00:02:15,530 pero dejo allí vale para que luego vea que funciona al otro lado estoy preparando todo 12 00:02:15,530 --> 00:02:25,370 para que funcione luego si lo quiero lo elimino y luego tengo que editar este señor de aquí con 13 00:02:25,370 --> 00:02:37,819 SimBuilder. SimBuilder está dando algunos problemas de vez en cuando se lía cuando se lía lo más 14 00:02:37,819 --> 00:02:44,039 probable que hayáis hecho algo raro y que él no reconozca su propio código o habéis modificado 15 00:02:44,039 --> 00:02:53,159 el código entonces allí se me empieza a molestar el consejo pues de vez en cuando mientras funciona 16 00:02:53,159 --> 00:02:59,460 hacer copias de este señor vale para que sea un determinado momento deja de funcionar podáis 17 00:02:59,460 --> 00:03:05,939 eliminar lo que está trabajando y no empezar desde cero va a empezar desde donde habéis dejado antes 18 00:03:05,939 --> 00:03:09,939 tened en cuenta que de todas formas hacer la interfaz gráfico cuando ya tenéis todo a 19 00:03:09,939 --> 00:03:17,199 lo más difícil es la parte del control del que haga cosas donde tenéis que vosotros pensar en 20 00:03:17,199 --> 00:03:23,139 algoritmo en el que tengo que hacer este código lo tenéis si tenéis que volver a rehacer el botón 21 00:03:23,139 --> 00:03:29,680 que cuando lo clicas llama este método es sencillo no se tarda mucho vale aún así se os pasa cinco o 22 00:03:29,680 --> 00:03:37,939 seis veces pues por eso fijaos también que por ahora lo digo ahora porque hoy pasará a mí no 23 00:03:37,939 --> 00:03:44,120 me ha pasado vale lo que puede ser es que vosotros en el utilizarlo lo estáis utilizando de una forma 24 00:03:44,120 --> 00:03:49,719 un poco impropia entonces a veces hagáis de este cabo como vosotros que a veces os da que cuando 25 00:03:49,719 --> 00:03:59,000 dais al play en vez de ejecutar el main que tenéis ejecuta otra cosa ejecuta un css2bin o cosa por 26 00:03:59,000 --> 00:04:05,659 el estilo entonces no os funciona vale fijaos en el que estáis ejecutando vale entonces que hacemos 27 00:04:05,659 --> 00:04:12,900 nosotros con esto? Pues ponemos un peina normal y corriente, ponemos una etiqueta donde ponemos 28 00:04:12,900 --> 00:04:25,649 una graciosísima pregunta. ¿Qué ponemos como pregunta? ¿Eh? No, no, no, déjate suscribirte. 29 00:04:25,649 --> 00:04:44,850 ¿Cómo andamos en Madrid? ¿Te gusta programar? Interrogación. ¿Qué dejamos ahí? Si lo 30 00:04:44,850 --> 00:05:06,420 tenemos más grande o más pequeño actuaremos sobre eso con CSS y luego dos botones, botón uno, botón dos, esto pone sí, esto pone no, entonces esta sería y luego si lo quiero hacer más 31 00:05:06,420 --> 00:05:15,480 bonito de otra forma o cosa por el estilo puedo trabajar aquí con CSS o puedo trabajar aquí mismo haciendo más grande o más pequeño o lo que sea, quiero que estos botones 32 00:05:15,480 --> 00:05:22,139 sean más pequeñitos por una razón práctica vale que ahora lo veremos después entonces tengo estos 33 00:05:22,139 --> 00:05:31,480 dos la idea es que un usuario ponga así y entonces que le diga muy bien si intenta pinchar no por 34 00:05:31,480 --> 00:05:40,300 ese fin no se mueva entonces vamos a hacer la parte fácil aquí le decimos que como control 35 00:05:40,300 --> 00:05:46,199 le quiero utilizar el controlador, esto no lo reconoce, entonces como siempre voy aquí, lo guardo, 36 00:05:47,459 --> 00:05:59,220 me voy aquí y compruebo que esté, guardo todo y luego hemos visto que el controlador en teoría 37 00:05:59,220 --> 00:06:05,839 debería estar porque ya lo he creado, pero no lo ve ahora mismo, pues entonces lo cierro, 38 00:06:05,839 --> 00:06:10,899 con un poco de suerte 39 00:06:10,899 --> 00:06:12,379 ahora si me ve 40 00:06:12,379 --> 00:06:24,290 entonces una vez que le he dicho que este es el controlador 41 00:06:24,290 --> 00:06:25,629 cuando voy al botón 42 00:06:25,629 --> 00:06:27,529 en el botón 43 00:06:27,529 --> 00:06:28,790 en la parte de código 44 00:06:28,790 --> 00:06:31,610 en la parte de on action del código 45 00:06:31,610 --> 00:06:33,230 pues me aparecen 46 00:06:33,230 --> 00:06:35,470 los varios métodos 47 00:06:35,470 --> 00:06:37,509 que he definido en el controlador 48 00:06:37,509 --> 00:06:38,750 particular aquí 49 00:06:38,750 --> 00:06:40,470 cuando hago clic 50 00:06:40,470 --> 00:06:46,529 no lo sé, que me cambie este de aquí 51 00:06:46,529 --> 00:06:47,730 con muy bien, vale 52 00:06:47,730 --> 00:06:50,370 entonces, para cambiar 53 00:06:50,370 --> 00:06:52,870 este de aquí, necesito darle una identidad 54 00:06:52,870 --> 00:06:54,310 le doy que se llama 55 00:06:54,310 --> 00:06:56,009 texto, vale 56 00:06:56,009 --> 00:06:57,889 guardo esto 57 00:06:57,889 --> 00:07:02,680 me voy 58 00:07:02,680 --> 00:07:03,279 al 59 00:07:03,279 --> 00:07:05,600 controlador 60 00:07:05,600 --> 00:07:08,139 y le digo que 61 00:07:08,139 --> 00:07:10,579 va a tener una conexión 62 00:07:10,579 --> 00:07:12,720 fxml con 63 00:07:12,720 --> 00:07:23,100 un label que se llama txt. Un label lo tengo que importar. Este, no este, ¿vale? Son dos 64 00:07:23,100 --> 00:07:38,000 packages distintos. Y aquí le diré que cuando haces clic en txt.setText, muy bien. Por tanto, 65 00:07:38,000 --> 00:08:02,459 Por ahora tengo esto, el lanzador que no es, ah no, claro, sí, me he olvidado de cambiar el main, ¿vale? 66 00:08:02,699 --> 00:08:16,279 El main este de aquí es el main por defecto que me da el proyecto de JavaFX, por lo tanto aquí le tengo que decir que quiero cargar lo que yo quiero, ¿vale? 67 00:08:16,279 --> 00:08:20,680 Entonces, esencialmente esta parte aquí se queda, a ver si me acuerdo hoy. 68 00:08:21,220 --> 00:08:33,779 Pues aquí creo un objeto que es un SXML loader, que es igual a FXML, no me acuerdo de nunca. 69 00:08:33,779 --> 00:08:56,200 New fxml loader, loader, get class, paréntesis, punto, fuera, o sea, no, paréntesis, fuera, 70 00:08:56,200 --> 00:09:15,399 Y aquí le pongo gui.fxml. Gracias. Este de aquí lo cargo, etc. Entonces, ahora mismo, 71 00:09:15,399 --> 00:09:51,340 esto sería mi scene, veo, no, está ahí, perdón, entonces, a, no, no, no, no lo voy a escribir, pues ya está aquí, aquí dentro voy a cargar, vale, entonces esto me da un parent, si no me equivoco, parent b, coma, por root, no, no sé si tenemos root, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no. 72 00:09:51,340 --> 00:10:10,059 Aquí root es igual a loader.load, justo, esto tiene que estar dentro del este, y luego 73 00:10:10,059 --> 00:10:23,059 creo una sin, ¿me equivoco? No. ¿Qué hago? Escrín. No. Escrín. Escrín. Escrín. Escrín. 74 00:10:23,059 --> 00:10:33,379 Así. Tendré que crearlo nuevo, ¿no? Sí, pero justo la primera es en mayúscula. Igual 75 00:10:33,379 --> 00:10:41,500 que le paso el root y el tamaño con el que creo que sea la escena, ¿vale? 76 00:10:42,080 --> 00:10:44,059 Hacemos 800 por 800. 77 00:10:46,720 --> 00:10:54,600 Luego, esta escena la acepto en el primary stage, que es este que tiene aquí, y luego lo incluimos. 78 00:10:55,440 --> 00:10:56,600 Con esto debería funcionar, ¿no? 79 00:10:58,840 --> 00:11:01,539 Vale, vamos a ver si ahora funciona. 80 00:11:07,440 --> 00:11:12,440 gusta programar, veis que 800x800 es más grande de lo que es, pues debería mirar yo 81 00:11:12,440 --> 00:11:16,759 cuál es el tamaño correcto y cosas por el estilo. Si pongo sí, me pone muy bien, si 82 00:11:16,759 --> 00:11:18,440 pongo no, por ahora no me interesa. 83 00:11:18,440 --> 00:11:21,440 Pienso 600x300. 84 00:11:21,440 --> 00:11:35,220 700x300, creo que es lo que viene. 85 00:11:35,220 --> 00:11:38,220 Al otro lado, por defecto. 86 00:11:38,220 --> 00:11:43,220 Esto lo podría ver, en teoría, por aquí, ¿no? 87 00:11:43,220 --> 00:11:47,220 A properties de este señor de aquí, ¿no me lo pongo por algún lado? 88 00:11:47,220 --> 00:11:51,039 No, no, no. 89 00:11:51,039 --> 00:11:53,039 Sí, 600 por 14. 90 00:11:53,039 --> 00:11:56,039 ¿Vale? Lo que estoy viendo aquí es 600 por 14. 91 00:11:56,039 --> 00:12:00,039 Si quiero que se corresponda, pues este número de aquí lo pongo al otro lado. 92 00:12:00,039 --> 00:12:03,039 No sé si, vamos a probarlo. 93 00:12:03,039 --> 00:12:05,039 Esto está sobrecargado así. 94 00:12:05,039 --> 00:12:12,230 Ah, claro, no hace falta poner el tamaño. 95 00:12:12,230 --> 00:12:20,110 entonces va a pillar el tamaño ya definido dentro de estos objetos 96 00:12:20,110 --> 00:12:26,169 los dos parámetros al lado si yo quiero forzar un tamaño distinto 97 00:12:26,169 --> 00:12:31,909 todavía más sencillo vale entonces 98 00:12:31,909 --> 00:12:37,570 a partir de aquí esto está funcionando tengo todo lo que tengo que tener pues 99 00:12:37,570 --> 00:12:45,490 lo único que me queda hacer es mover el botón derecho. Para mover el botón derecho yo quiero 100 00:12:45,490 --> 00:12:52,509 que en determinadas situaciones pase algo para moverse. Entonces necesito aquí crear un método 101 00:12:52,509 --> 00:13:04,549 que lo que haga es hacer mover el botón. Entonces tendré un método mover que hace mover el botón. 102 00:13:04,549 --> 00:13:14,909 Ahora, la idea es que o lo dejo así, y aquí me hago una referencia al botón que se tiene 103 00:13:14,909 --> 00:13:22,409 que mover, siendo que solo un botón se mueve, o en el caso en que yo quiera que el propio 104 00:13:22,409 --> 00:13:31,250 botón en el que tú haces algo es el que se mueve, entonces no lo debería hacer sin 105 00:13:31,250 --> 00:13:38,389 parámetros va a poner aquí un evento vale y cuando pasa este evento pillar 106 00:13:38,389 --> 00:13:43,870 quien ha hecho el evento y mover ese botón de ahí vamos a hacer el segundo 107 00:13:43,870 --> 00:13:50,090 modo es varios porque si trabajamos también es si me voy aquí y voy a este 108 00:13:50,090 --> 00:13:59,370 botón veis que en el code nosotros hemos dado esto una acción vale un hecho es la 109 00:13:59,370 --> 00:14:06,129 más importante, digamos, del botón, que es cuando haces clic en el botón, ¿vale? 110 00:14:06,129 --> 00:14:12,129 Pero en este caso nosotros no queremos usar este evento. Nosotros no queremos mover el botón cuando 111 00:14:12,129 --> 00:14:16,809 hago clic. Podría ser que cada vez que yo hago clic se mueva de otro lado, como decir, no me has clicado, 112 00:14:16,809 --> 00:14:21,529 ¿vale? Podría ser eso también. Pero nosotros no lo queremos así. Nosotros queremos que sea imposible 113 00:14:21,529 --> 00:14:29,090 de llegar allí porque cuando yo entro encima del botón, el botón se mueva. Entonces el evento 114 00:14:29,090 --> 00:14:38,990 no es el action. Es otro evento. Es onMouseOver, que vosotros habéis visto en HTML barra Javascript. 115 00:14:38,990 --> 00:14:45,649 Lo busco por aquí. Veis que aquí hay varios eventos. Estos son eventos de drag and drop, 116 00:14:45,649 --> 00:14:57,230 de cuando pincho y lo arrastro. Si detecta que se ha empezado a arrastrar, si al final cuando ya se 117 00:14:57,230 --> 00:15:08,090 arrastrado si el mouse entra mientras está arrastrando etcétera estos son todos distintos 118 00:15:08,090 --> 00:15:15,289 eventos relativos con el track and roll vale eventos de keyboard este de aquí son con el teclado estoy 119 00:15:15,289 --> 00:15:23,470 poniendo una tecla la he presionado la he soltado o la he presionado y soltado vale luego está ratón 120 00:15:23,470 --> 00:15:27,429 que es lo que nos interesa, luego está de rotación, porque esto también puede estar 121 00:15:27,429 --> 00:15:33,409 relacionado con cosas de móviles, entonces si tengo una pantalla táctil y he rotado y 122 00:15:33,409 --> 00:15:42,309 cosas por el estilo, swipe de haber deslizado, gracias, o tocado, o haciendo zoom, o sea que 123 00:15:42,309 --> 00:15:49,409 tengo todos estos posibles eventos. A eso nos interesan ahora mismo los eventos del mouse. 124 00:15:49,409 --> 00:15:53,789 entonces nosotros pillamos el mouse y miramos cuáles son 125 00:15:53,789 --> 00:15:56,210 a nosotros lo que queremos es que cuando el ratón 126 00:15:56,210 --> 00:15:59,669 entra en el botón 127 00:15:59,669 --> 00:16:01,190 pues se mueva, ¿vale? 128 00:16:01,429 --> 00:16:03,929 entonces, ¿cuál veis que hará esto? 129 00:16:06,009 --> 00:16:07,269 con mouse enter 130 00:16:07,269 --> 00:16:11,549 esto es mi evento que cuando el mouse entra 131 00:16:11,549 --> 00:16:14,950 en el campo de acción del botón 132 00:16:14,950 --> 00:16:17,129 pues ejecutará un método 133 00:16:17,129 --> 00:16:23,870 ¿Qué método? Pues el otro. ¿No lo he guardado? ¿Sí lo he guardado? No. 134 00:16:25,029 --> 00:16:33,710 Acordaos que si aquí no aparece, esto sí lo podéis refrescar simplemente clickeando aquí y seleccionando otra vez el controller. 135 00:16:34,070 --> 00:16:38,269 Entonces con esto ya ha recargado el control. No, esta vez no. 136 00:16:38,269 --> 00:16:41,429 Esta vez el detective no. Otra vez el detective no ha hecho. 137 00:16:41,429 --> 00:16:49,080 a lo mejor no le he puesto el fx 138 00:16:56,779 --> 00:16:57,899 a refrescar que? 139 00:16:57,899 --> 00:17:06,339 si pero el refresh no debería afectar ese, el refresh afecta al otro 140 00:17:06,339 --> 00:17:09,220 aquí un refresh no lo he encontrado, habéis encontrado el refresh 141 00:17:09,220 --> 00:17:19,920 Entonces, debería aparecer en algún momento, lo borro, lo pongo otra vez, ahí, ahora sí. 142 00:17:23,599 --> 00:17:30,140 Lucháis un poquito con ellos, la forma de refrescarlo, a veces cerrarlo y abrirlo otra vez, 143 00:17:30,140 --> 00:17:34,680 es un poco lento, seguro que hay un método mejor, cuando lo encontraré en un futuro, pues os lo diré. 144 00:17:34,680 --> 00:17:47,509 vale entonces ahora cuando el mouse entra aquí pues ejecutará el mundo vamos a ver si funciona 145 00:17:47,509 --> 00:17:57,990 guardo vuelvo aquí actualizó esta parte de aquí vale para estar seguro que lo puedo mirar aquí 146 00:17:57,990 --> 00:18:06,750 vale, por algún lado tiene que decir es esto, onMouseEntered, move. Entonces ahora le hago hacer, 147 00:18:06,750 --> 00:18:20,569 por ejemplo, en el controller que imprima algo y entonces cada vez que yo entro en ese botón 148 00:18:20,569 --> 00:18:26,269 me escribirá algo, veis, entro algo, ahora que si estoy dentro y me muevo no hace nada, 149 00:18:26,269 --> 00:18:34,230 es al momento en que le entro que salta esta cosa entonces ahora tengo toda la parte de interfaz 150 00:18:34,230 --> 00:18:43,390 gráfica barra eventos ya la tengo lista tengo lo único que tengo que hacer ahora es implementar 151 00:18:43,390 --> 00:18:51,690 un metodito aquí que lo que haga es cerrarlo ahora fijaos que por ahora lo hemos superpuesto sin 152 00:18:51,690 --> 00:18:58,369 evento vale entonces si quisiera aquí ahora tener esa equipo debería poner aquí un botón algo así no 153 00:18:58,369 --> 00:19:12,160 gustó llamar a ver al otro botón y ya tendría acceso vale pero esto me serviría por cualquier 154 00:19:12,160 --> 00:19:18,460 cosa que yo haga mucho siempre mueve este botón en vez de yo quisiera tener dos botones que se 155 00:19:18,460 --> 00:19:25,539 muevan vale en general que tengo tres opciones así bueno no tanto mucho y no vale y quiero que 156 00:19:25,539 --> 00:19:31,140 tú puedas pinchar sólo si entonces son los dos dólares en el mover debería hacer dos duplicar 157 00:19:31,140 --> 00:19:36,779 este código de aquí o sea que yo no quiero entonces los acordáis como hacía podía crear 158 00:19:36,779 --> 00:19:44,619 este método de aquí en vez que sea sin parámetros ponerle aquí un evento nosotros hemos visto acción 159 00:19:44,619 --> 00:19:59,690 un evento esto tengo que importar y fijaos que hay a vt o java cx vale quiero el de java cx vale 160 00:19:59,690 --> 00:20:02,210 perfecto esto se ha enfadado con mucho 161 00:20:06,210 --> 00:20:28,190 ahora vale entonces si ahora yo lo lanzo que va a pasar que cuando entro en el no explota vamos 162 00:20:28,190 --> 00:20:30,549 a entender por qué explota. 163 00:20:30,710 --> 00:20:32,109 ¿Vosotros qué hacéis? Porque todo esto 164 00:20:32,109 --> 00:20:33,450 lo ponéis a una 165 00:20:33,450 --> 00:20:35,829 tarjeta artificial y preguntáis. 166 00:20:35,990 --> 00:20:37,970 Vamos a leer si entendemos algo. 167 00:20:38,849 --> 00:20:39,369 Me dice 168 00:20:39,369 --> 00:20:42,349 una illegal argument exception. 169 00:20:42,990 --> 00:20:44,109 Argument type 170 00:20:44,109 --> 00:20:44,950 mismatched. 171 00:20:45,869 --> 00:20:46,369 ¿Qué quiere? 172 00:20:46,970 --> 00:20:52,099 Tipo de argumento no sé qué. 173 00:20:53,039 --> 00:20:55,599 Mismatched es como que no corresponde. 174 00:20:55,599 --> 00:20:56,519 Dice, oye, mira. 175 00:20:57,200 --> 00:20:58,900 Es una excepción de 176 00:20:58,900 --> 00:21:01,559 argumento ilegal. Argumento que 177 00:21:01,559 --> 00:21:07,759 no puede estar ahí. ¿Vale? ¿Cuál es la descripción? Pues que el tipo del argumento 178 00:21:07,759 --> 00:21:17,349 no se corresponde. ¿Qué os hace pensar? ¿Dónde está el error? Aquí. ¿Qué es el 179 00:21:17,349 --> 00:21:30,990 argumento? Está aquí. ¿Vale? Te está diciendo este tipo no me gusta. Te está diciendo oye 180 00:21:30,990 --> 00:21:40,549 mira, tú estás haciendo un móvil de action event, pero cuando pasa esto, hay un error en este tipo de aquí. 181 00:21:41,490 --> 00:21:44,569 ¿Qué os hace pensar? Que lo que se crea, ¿qué es? 182 00:21:49,740 --> 00:21:58,259 Lo que deberíais pensar, y lo vemos así para que vosotros reflexionáis sobre esto y empezáis a pensar en la filosofía, 183 00:21:58,619 --> 00:22:03,299 es que se crea un evento, porque algo pasa. Alguien llama a este móvil. 184 00:22:03,299 --> 00:22:29,599 Entonces el evento se ha creado y hemos visto antes que funcionaba, cuando yo entraba pues me escribía, cuando esto no estaba me escribía este algo, ¿vale? Ahora se lo he metido y se enfada, dice, oye, mira, no, que no es esto, porque posiblemente lo que yo estoy llamando action event no es un action event, lo que se está creando ahora no es un action event, porque action event se creaba ¿cuándo? ¿Cuándo se creaba action event? 185 00:22:29,599 --> 00:22:35,980 al hacer el clic 186 00:22:35,980 --> 00:22:38,220 hacer el clic, eso es un action 187 00:22:38,220 --> 00:22:39,619 y crea un actionEvent 188 00:22:39,619 --> 00:22:41,880 entonces cuando yo uso esto 189 00:22:41,880 --> 00:22:43,160 un action 190 00:22:43,160 --> 00:22:47,980 el método puede ser o sin parámetros 191 00:22:47,980 --> 00:22:50,319 o utilizando un actionEvent 192 00:22:50,319 --> 00:22:52,319 porque este evento 193 00:22:52,319 --> 00:22:53,819 de aquí crea un objeto 194 00:22:53,819 --> 00:22:56,059 actionEvent que luego se linkará 195 00:22:56,059 --> 00:22:58,079 con este método y lo usaré ahí dentro 196 00:22:58,079 --> 00:22:59,079 lo que hemos hecho ayer 197 00:22:59,079 --> 00:23:02,200 ahora nosotros que conocíamos solo el actionEvent 198 00:23:02,200 --> 00:23:03,640 decimos, vale, pongo actionEvent 199 00:23:03,640 --> 00:23:19,519 Pero lo que te está diciendo es que algo pasa, se crea un evento, pero el tipo de este evento no es ActionEvent, entonces me salta una ilegal argumentación de exception. Estoy usando este método, aspirándome a un ActionEvent y me estás metiendo ahí algo que no es un ActionEvent. 200 00:23:19,519 --> 00:23:29,740 lo que pasa es que no lo sé 201 00:23:29,740 --> 00:23:31,440 porque lo estoy aprendiendo ahora 202 00:23:31,440 --> 00:23:33,779 pero hay distintos tipos 203 00:23:33,779 --> 00:23:35,700 de eventos, el action event 204 00:23:35,700 --> 00:23:37,880 es cuando hago el click o cuando hago la acción 205 00:23:37,880 --> 00:23:39,779 entre comillas, pues esto no es 206 00:23:39,779 --> 00:23:41,900 un evento, entrar con el ratón 207 00:23:41,900 --> 00:23:44,039 no ha hecho click, por lo tanto no se genera 208 00:23:44,039 --> 00:23:45,900 un action event, no ha habido 209 00:23:45,900 --> 00:23:46,940 el evento de acción 210 00:23:46,940 --> 00:23:49,440 ha habido un evento relacionado a gol 211 00:23:49,440 --> 00:23:54,980 con el mouse 212 00:23:54,980 --> 00:23:56,279 pues 213 00:23:56,279 --> 00:24:03,920 eso 214 00:24:03,920 --> 00:24:18,750 entonces cada uno de estos elementos que tenemos aquí pues generará su propio evento 215 00:24:18,750 --> 00:24:25,690 posiblemente por categorías estos eran eventos del mouse pues estos realmente si le pongo más 216 00:24:25,690 --> 00:24:38,480 event no funcionará si le pongo action event tampoco estos serán un kibble event o key event 217 00:24:38,480 --> 00:24:46,099 no lo sé, lo tengo que buscar. Pero la filosofía es siempre eso, cada uno de estos eventos estará 218 00:24:46,099 --> 00:24:52,880 relacionado, generará un objeto de un determinado tipo y si yo uso aquí un método que tiene que 219 00:24:52,880 --> 00:25:00,019 trabajar con ese método tendré que ir a mirar cuál es ese método, cuál es ese evento. Habrá 220 00:25:00,019 --> 00:25:08,359 distintos tipos de eventos, que puedo ir a buscar tanto en una API como en inteligencia 221 00:25:08,359 --> 00:25:11,819 artificial y cosas por el estilo, y decirle, mira, estoy haciendo, estoy haciendo, ¿qué 222 00:25:11,819 --> 00:25:16,519 tipo de evento genera? Pues el evento es el Keyboard Event. Pues entonces allí le pondrán 223 00:25:16,519 --> 00:25:24,259 Keyboard Event. Pero la idea no es saber qué, pero saber qué tengo que poner. Luego, una 224 00:25:24,259 --> 00:25:28,380 vez que yo sé, estoy consciente que lo es, pues no puedo saber todo en la vida, pues 225 00:25:28,380 --> 00:25:33,180 sé que cuando me enfrenta a una cosa así tengo que ir a buscar qué tipo de evento. 226 00:25:33,180 --> 00:25:42,029 Entonces si lo pongo así y ahora lo lanzo, ya vuelve a funcionar. 227 00:25:42,029 --> 00:25:50,029 Ahora me está entrando aquí correctamente, no está haciendo el error y tengo a disposición 228 00:25:50,029 --> 00:26:00,269 mi mouseEvent que llamaré m. Entonces ahora lo que quiero hacer es saber quién ha ejecutado, 229 00:26:00,269 --> 00:26:17,079 quien ha causado este evento. Y esto es como la otra vez, es m.getSold. Este de aquí devuelve 230 00:26:17,079 --> 00:26:30,990 el componente que ha generado este evento de aquí. Este de aquí sería un object, pero yo sé que no es 231 00:26:30,990 --> 00:26:37,170 un object vale yo este de aquí lo he puesto en un botón lo sé porque lo he hecho yo ahora si tú 232 00:26:37,170 --> 00:26:43,349 quisiera mover distintos tipos de componentes pues a lo mejor deberías poner algo más de alto 233 00:26:43,349 --> 00:26:47,730 nivel si vosotros buscáis la jerarquía con que están hechos los controles porque probablemente 234 00:26:47,730 --> 00:26:54,990 todos los controles derivarán de una de una clase genérica que será control en general y luego desde 235 00:26:54,990 --> 00:27:02,789 controla el botón, hay textarea, hay label, o cosa por el estilo. Y sabría que ver cómo está hecho de verdad, ¿vale? 236 00:27:02,789 --> 00:27:11,549 Pero como yo sé que ahora es un botón en concreto, le puedo decir, no, yo quiero un botón, ¿vale? Un botón, cuidado, de JavaFX, ¿eh? 237 00:27:11,549 --> 00:27:25,450 No de Lang, no de AuvT, de JavaFX. Y esto se enfada porque dice, no, esto es un object. Yo sé que esto es un botón y puedo hacer un casting. 238 00:27:26,430 --> 00:28:01,789 dame esta cosa de aquí, esto será un objeto, pero yo sé que es un botón, dame un botón, si no lo supiera podría preguntar, si esta cosa de aquí es tan soft de button, pues entonces hace esta cosa, y si no, entonces si yo tengo esta cosa aquí, pues ahora podría decir, por ejemplo, escribeme o, vamos a ver qué hace, es el botón que tiene no dentro, 239 00:28:01,789 --> 00:28:11,349 Entonces me está reconociendo el botón correcto. Vale, perfecto. Entonces ahora me queda a 240 00:28:11,349 --> 00:28:28,859 este señor hacerle algo para moverlo. Po punto set. Probablemente, siempre filosofía 241 00:28:28,859 --> 00:28:38,319 de Java y cosas por el estilo, el botón tendrá una posición. Y yo lo que quiero es modificar 242 00:28:38,319 --> 00:28:46,140 esa posición entonces nosotros tenemos siempre getter y setter pues la posición será un elemento 243 00:28:46,140 --> 00:28:53,579 un atributo de este botón que me dice está en esta posición entonces por aquí yo puedo buscar 244 00:28:53,579 --> 00:29:00,880 y ver set y get para ver si algo me dice oye mira esto podría ser vale pero por ejemplo max size 245 00:29:00,880 --> 00:29:10,500 muchas cosas esto si no tengo tiempo lo busco en internet o cosas por el estilo tengo mucho 246 00:29:10,500 --> 00:29:16,500 tiempo me lo leo vale pero fijaos que puedo poner un escalado puedo poner muchas cosas 247 00:29:16,500 --> 00:29:26,519 en particular es una cosa que se llama layout layout x y layout y estos son la x y la y de 248 00:29:26,519 --> 00:29:42,259 dónde está este botón. Entonces, si yo pillo esto y lo sexto a 100, por ejemplo, cuando yo lo lanzo, 249 00:29:44,200 --> 00:29:53,079 al entrar aquí me lo mueve a 100. Está claro que ahora cuando entro otra vez me lo mueve a 100, 250 00:29:53,079 --> 00:30:01,990 entonces me lo deja ahí. Entonces ahora lo puedo quitar. Por ahora, simplemente he encontrado la 251 00:30:01,990 --> 00:30:20,480 forma de mover cómo está el set está el get vale entonces si yo puedo poner una cosa y ya la 252 00:30:20,480 --> 00:30:36,740 posición actual y a esa posición actual le restas 50 quiere decir que cada vez que entraré pillo 253 00:30:36,740 --> 00:30:51,559 donde está ahora, y lo muevo 50 a la izquierda, entonces, ahora yo entro y me lo da de 50 254 00:30:51,559 --> 00:30:56,319 a la izquierda, entro, 50 a la izquierda, entro, 50 a la izquierda, entro, 50 a la izquierda, 255 00:30:56,319 --> 00:31:09,869 y no me deja pillarlo hasta que sale, ¿sí? Para saber dónde está y ver si puedo hacer 256 00:31:09,869 --> 00:31:21,730 algo lo que puede hacer es inscribirme donde estoy vale y eso o punto gert leo text 257 00:31:28,940 --> 00:31:37,440 entonces veamos lanzó esto lo estoy haciendo de forma como entre comillas deberías hacer vosotros 258 00:31:37,440 --> 00:31:43,460 para decir yo no sé hacerlo voy haciendo pruebas voy descubriendo cómo trabajar con esto vale me 259 00:31:43,460 --> 00:31:49,579 ha dicho la inteligencia artificial que con setLayout, getLayout, pues puedo ver dónde está y 260 00:31:49,579 --> 00:31:56,700 cambiarle la cosa, pues voy a hacer pruebas. Entonces ahora veo que está aquí y veis que cuando sale es porque 261 00:31:56,700 --> 00:32:06,359 está fuera, ¿vale? O sea que esto es el cero. Perfecto, ahora sí que este es el cero. Entonces, si sé que 262 00:32:06,359 --> 00:32:08,640 eso es el cero, me podría preguntar 263 00:32:08,640 --> 00:32:10,519 oye, mira, si he ido 264 00:32:10,519 --> 00:32:12,380 a la izquierda 265 00:32:12,380 --> 00:32:12,960 del cero, 266 00:32:14,299 --> 00:32:15,460 ¿me lo apareciera al otro lado? 267 00:32:17,970 --> 00:32:18,089 ¿Sí? 268 00:32:18,869 --> 00:32:19,309 Sí. 269 00:32:21,190 --> 00:32:21,789 Sí. 270 00:32:23,170 --> 00:32:24,490 Oh, punto. 271 00:32:24,890 --> 00:32:26,089 Get layout 272 00:32:26,089 --> 00:32:27,769 x 273 00:32:27,769 --> 00:32:30,490 es menor que cero. 274 00:32:33,829 --> 00:32:34,690 Si después de haberlo 275 00:32:34,690 --> 00:32:36,490 movido es a cero, pues 276 00:32:36,490 --> 00:32:37,210 entonces 277 00:32:37,210 --> 00:32:40,549 hazme hacer un salto a otro lado 278 00:32:40,549 --> 00:32:43,289 ponlo a 279 00:32:43,289 --> 00:32:46,029 no lo sé, al principio había empezado 280 00:32:46,029 --> 00:32:48,589 tipo a 400, pues vuélvelo a su sitio 281 00:32:48,589 --> 00:32:50,569 a 472 282 00:32:50,569 --> 00:32:52,450 lo pongo a 472 283 00:32:52,450 --> 00:32:53,150 feo, eh 284 00:32:53,150 --> 00:32:58,099 estamos haciendo feo, pero 285 00:32:58,099 --> 00:33:00,319 trabajando un poco 286 00:33:00,319 --> 00:33:02,960 entonces ahora tengo 287 00:33:02,960 --> 00:33:04,700 mi botón 288 00:33:04,700 --> 00:33:08,380 que cuando intento pincharlo 289 00:33:08,380 --> 00:33:10,079 se mueve, se mueve, se mueve 290 00:33:10,079 --> 00:33:15,940 y cuando llega a un lado pues vuelve a su sitio. Yo intento pillar otra vez y ya no puedo. 291 00:33:17,039 --> 00:33:24,420 En una versión muy sencilla de esta cosa, a ver si ya lo he hecho. No lo puedo clicar. 292 00:33:25,960 --> 00:33:40,289 Si lo intento a lo mejor a veces lo consigo. Para hacerlo un poquito más bonito, lo que pasa es que se mueve también arriba y abajo. 293 00:33:40,289 --> 00:33:52,150 Podría hacer lo mismo arriba-abajo. Es decir, cuando lo mueves así, lo mueves también así, 294 00:33:52,150 --> 00:34:06,839 se moverá en diagonal. Es decir, siempre es lo mismo. Y si llega un momento en que me paso y me 295 00:34:06,839 --> 00:34:20,849 me voy demasiado para arriba, pues Z lo A, lo aflito, vuelvo para abajo. Entonces, ¿qué 296 00:34:20,849 --> 00:34:37,289 pasa? Aquí tengo esto, ah no, lo he hecho mal, lo he hecho mal, lo he hecho mal, ah 297 00:34:37,289 --> 00:34:53,119 porque aquí lo he puesto ahí, esto sería Y, Y, Y. Ahora se mueve por allí, de vez 298 00:34:53,119 --> 00:35:07,929 Esto parece ya un poquito más aleatorio, en realidad no es aleatorio, va siempre en ese mismo sitio, veis que hace siempre esta S, tiqui, tiqui, tiqui, tiqui. 299 00:35:07,929 --> 00:35:22,909 Lo importante también es que yo lo mueva de un tamaño suficiente, me explico, si yo aquí en vez de menos 50 lo quito de menos 1, me lo mueve, pero yo me quedo dentro. 300 00:35:22,909 --> 00:35:26,710 entonces, si a lo mejor vengo por aquí 301 00:35:26,710 --> 00:35:27,730 no lo consigo pillar 302 00:35:27,730 --> 00:35:30,469 pero si vengo por aquí, lo mueve 303 00:35:30,469 --> 00:35:31,710 y ahora estoy dentro, lo puedo quitar 304 00:35:31,710 --> 00:35:36,829 entonces, en teoría debería ver 305 00:35:36,829 --> 00:35:38,110 cuál es el tamaño 306 00:35:38,110 --> 00:35:39,929 de... 307 00:35:39,929 --> 00:35:42,289 si voy demasiado rápido no consigo procesar 308 00:35:42,289 --> 00:35:43,550 entonces consigo entrar igualmente 309 00:35:43,550 --> 00:35:45,610 el tamaño del 310 00:35:45,610 --> 00:35:48,730 botón y moverlo 311 00:35:48,730 --> 00:35:50,670 al menos del mismo 312 00:35:50,670 --> 00:35:52,289 tamaño, de esta forma 313 00:35:52,289 --> 00:35:56,789 estoy seguro que mi ratón se quede fuera del botón este. 314 00:35:56,789 --> 00:36:02,170 Voy a ir a ver aquí cuál es el tamaño. 315 00:36:02,170 --> 00:36:18,809 Hay una propiedad. 316 00:36:18,809 --> 00:36:40,019 esta es la posición inicial pero no veo el país white de 34 25 34 25 si yo lo muevo en 317 00:36:40,019 --> 00:36:47,340 el ancho 34 en altera 25 siempre mi ratón cuando lo muevo estará fuera entonces al 318 00:36:47,340 --> 00:36:59,019 entrar otra vez lo hará. Esto sería, digamos, lo mínimo, ¿sí? Vale, ok, hagamos un poquito distinto. 319 00:36:59,019 --> 00:37:05,099 También aquí podría haber problemas de si se mete detrás de esto, ¿vale? Que es lo que me ha pasado 320 00:37:05,099 --> 00:37:10,380 antes, creo, que ha llegado un momento que si se mete detrás de este de aquí no consigue entrar en 321 00:37:10,380 --> 00:37:16,380 ese, por cierto, esto debería estar como detrás del todo o estar deshabilitado para que no me pase 322 00:37:16,380 --> 00:37:22,699 problema o yo debería comprobar que este botón nunca se ponga en esta zona aquí 323 00:37:24,340 --> 00:37:30,780 lo dejamos por ahora así y después le hacemos un poquito de aleatoriedad para que esto se mueva 324 00:37:30,780 --> 00:37:40,219 con lo que hemos visto hasta ahora suficiente entre comillas el ejercicio está hecho y los 325 00:37:40,219 --> 00:37:46,099 elementos que podéis utilizar y que tenéis que utilizar ya los tenéis para hacer el cambio que 326 00:37:46,099 --> 00:37:51,599 tenéis que hacer y cosas por el estilo. La única cosa es que podríamos a este punto mejorar el 327 00:37:51,599 --> 00:37:59,599 algoritmo de movimiento para intentar hacerle hacer algo más lógico. Por ejemplo, en vez que 328 00:37:59,599 --> 00:38:05,360 se mueva siempre de 50 en una dirección y cosas por el estilo, pues que haya un movimiento aleatorio. 329 00:38:05,360 --> 00:38:13,880 Ya si vosotros en vez de 50 menos o 50 más le ponéis un pequeño random diciendo que a veces 330 00:38:13,880 --> 00:38:18,079 se mueva a la derecha, a veces a la izquierda, a veces arriba, a veces abajo, pues ya podría 331 00:38:18,079 --> 00:38:29,760 ser suficiente. Si queremos un primer enfoque así, pues esto cuando se llama, yo aquí 332 00:38:29,760 --> 00:38:55,309 Y hago un, bueno, doble x es igual a, digo, vamos a crear un random, random r es igual a new random coma. 333 00:38:55,309 --> 00:39:14,039 Le hacemos que int 1 es igual a r.nextint entre 0 y 100. 334 00:39:15,699 --> 00:39:17,079 Va a ser algo, ¿eh? 335 00:39:19,889 --> 00:39:20,449 Y 2. 336 00:39:22,550 --> 00:39:22,849 ¿Vale? 337 00:39:22,849 --> 00:39:37,889 Y luego cuando tengo que moverlo, pues le digo, si 1 es menor que 50, pues entonces hace esto. 338 00:39:39,050 --> 00:39:41,710 No, hace esto. 339 00:39:43,110 --> 00:39:47,550 Esto lo quita 50 hacia atrás y esto le suma 50. 340 00:39:47,550 --> 00:40:20,309 Luego, hago lo mismo con 2, pero moviendo la Y, y una vez que lo he movido, tengo que comprobar si ha salido de los márgenes, ¿vale? 341 00:40:20,309 --> 00:40:29,670 entonces si es menor que cero pues lo resete a este punto de aquí y también voy a comprobar que 342 00:40:31,510 --> 00:40:34,989 si a dónde va es mayor 343 00:40:37,130 --> 00:40:45,250 por ejemplo aquí 472 me queda como una caja así si se la da allí pues lo vuelves a cero 344 00:40:45,250 --> 00:41:04,579 y si supera los 300, pues lo vuelves arriba, 10. Si hago una cosa de ese estilo, la idea es que aquí 345 00:41:04,579 --> 00:41:11,519 tengo una caja como entre 10 y 300 así, y entre 10 y 472 así, donde sustancialmente se puede 346 00:41:11,519 --> 00:41:17,579 mover de 50 en 50 en direcciones variables si sale de esta caja va al otro lado vale entonces 347 00:41:17,579 --> 00:41:23,519 tiene cosas y normalmente se mueve veis que ahora el movimiento es más aleatorio cuando 348 00:41:23,519 --> 00:41:29,059 sale de la caja salta al otro lado y cuando está dentro de la caja más altitos más pequeños 349 00:41:32,760 --> 00:41:40,360 esto es es aleatorio vale veis que tiene un comportamiento que ha definido con esta 350 00:41:40,360 --> 00:41:47,639 pues aquí pero no es aleatorio de un punto cualquiera aquí dentro es nunca podré hacer 351 00:41:47,639 --> 00:41:54,239 clic porque siempre me lo mueve mínimo de 50 por lo tanto nunca estará dentro de y ha entrado y 352 00:41:54,239 --> 00:41:59,920 me lo ha movido en un sitio donde donde está pero al mismo tiempo es un poquito más aleatorio que 353 00:41:59,920 --> 00:42:14,880 antes opción número uno si no podríamos hacer justo para para gestionar esto no es elegante 354 00:42:14,880 --> 00:42:24,380 como lo he hecho estas cosas de 50 esta cosa de 100 aquí esta cosa de poner 472 es feo vale son 355 00:42:24,380 --> 00:42:33,199 cuando se usan números así de que sea más grande o más pequeño pues no son números pero es para 356 00:42:33,199 --> 00:42:39,019 que entendamos un poquito cómo funciona y luego uno puede intentar hacerlo de forma más elegante 357 00:42:39,980 --> 00:42:43,440 vamos a crear un 2 358 00:42:43,440 --> 00:43:08,750 Así no borramos este no. Y si queremos, creamos otro botón, que es el segundo no, que también es 359 00:43:08,750 --> 00:43:24,420 no. Pero este de aquí se mueve con move2. Siempre al entrar con el ratón, sería un mouse enter, 360 00:43:24,420 --> 00:43:49,690 Pues no me lo ve, voy aquí, lo borro, lo cago en el cabezo, voy aquí, lo guardo, ¿vale? 361 00:43:49,690 --> 00:44:05,389 Este botón de aquí se mueve con el algoritmo que hemos echado aquí, aquí hacemos un algoritmo nuevo y este botón se 362 00:44:05,389 --> 00:44:19,570 se moverá de una forma distinta. Lo guardo, vuelvo aquí, vuelvo a mi control. Vamos a hacer una cosa 363 00:44:19,570 --> 00:44:25,710 distinta aquí, vamos a hacer que se mueva pero de una forma aleatoria. Entonces yo necesito un 364 00:44:25,710 --> 00:44:34,489 mínimo máximo, un mínimo máximo y que él elija aleatoriamente el mínimo máximo. Entonces por 365 00:44:34,489 --> 00:44:41,389 ahora pienso solo en la X, ¿sí? Voy a dar el aire. Entonces, ¿cuál es el mínimo en la X? 366 00:44:49,039 --> 00:44:51,079 ¿Cuál es el máximo en la X? 367 00:44:51,079 --> 00:45:10,489 ¿Más elegante? Pues vamos a preguntar cuánto es grande el panel, ¿vale? Entonces, 368 00:45:10,489 --> 00:45:38,380 mi panel básico era un pane, aquí el panel básico lo llamo pane, guardo, ahora esto está conectado 369 00:45:38,380 --> 00:45:49,099 a mi pane, entonces si yo puedo preguntarme aquí, oye mira, ¿cuál es el ancho del pane? 370 00:45:49,099 --> 00:46:10,329 Ahora, si yo lo pongo en cero, está aquí. Si yo lo pongo en 500 y esto es grande 500, 371 00:46:10,329 --> 00:46:21,079 ¿dónde está el botón? Aquí. Entonces, mi máximo no puede ser 500 porque no se vería, 372 00:46:21,079 --> 00:46:41,880 no puede ser el width. Sería el width menos, justo, el ancho del pane menos el ancho del botón. 373 00:46:43,619 --> 00:46:54,780 Así siempre se verá. Entonces, yo puedo moverlo donde me da la gana entre estos dos, ¿vale? 374 00:46:54,780 --> 00:47:08,539 Entonces, doble nuevo x será igual a, hagamos un random, random, random, es igual a random, 375 00:47:08,539 --> 00:47:10,980 entre 376 00:47:10,980 --> 00:47:14,440 será un 377 00:47:14,440 --> 00:47:16,860 rand.next doble 378 00:47:16,860 --> 00:47:20,199 entre minx 379 00:47:20,199 --> 00:47:22,909 y 380 00:47:22,909 --> 00:47:24,889 maxx 381 00:47:24,889 --> 00:47:28,030 ¿sí? 382 00:47:29,030 --> 00:47:29,349 mal 383 00:47:29,349 --> 00:47:32,429 repito, penso todos con x 384 00:47:32,429 --> 00:47:33,849 luego todo esto me pongo y 385 00:47:33,849 --> 00:47:35,510 y debería funcionar en vez de que y 386 00:47:35,510 --> 00:47:37,090 y ya está 387 00:47:37,090 --> 00:47:38,369 ¿vale? 388 00:47:38,690 --> 00:47:40,469 ahora, esto funcionaría 389 00:47:40,469 --> 00:48:04,170 yo podría hacer o.setLayoutX en nuevo x y funciona. ¿Funciona? ¿Te lo digo? ¿Te lo voy a hacer? No, ¿eh? 390 00:48:06,230 --> 00:48:28,940 Esto explota porque... ¿Qué estoy haciendo? Esto sí, esto no. ¿Qué estoy haciendo más? 391 00:48:33,090 --> 00:48:38,050 A ver, null pointer exception. No está conectado al pane. 392 00:48:39,630 --> 00:48:42,050 ¿Has puesto lo del arroba fxml? 393 00:48:42,409 --> 00:48:48,690 Pero no lo está pillando bien. 394 00:48:51,030 --> 00:48:53,130 Es posible que aquí... 395 00:48:53,130 --> 00:48:55,409 Se llama pane, sí. 396 00:48:57,630 --> 00:48:58,570 A veces... 397 00:48:59,769 --> 00:49:00,250 No. 398 00:49:03,530 --> 00:49:12,010 A veces tarda un rato en entenderlo. 399 00:49:12,909 --> 00:49:14,469 Ahora parece sí que funciona. 400 00:49:14,469 --> 00:49:15,630 ¿Vale? ¿Funciona esta cosa? 401 00:49:17,550 --> 00:49:18,070 Entregamos. 402 00:49:19,889 --> 00:49:20,409 ¿Sí? 403 00:49:21,590 --> 00:49:22,110 ¡Suspenso! 404 00:49:22,769 --> 00:49:23,070 ¿Por qué? 405 00:49:27,019 --> 00:49:28,739 No es suspenso, está bien, pero 406 00:49:28,739 --> 00:49:31,880 el problema es que como esto es totalmente random, 407 00:49:32,480 --> 00:49:33,619 me lo podría mover 408 00:49:33,619 --> 00:49:35,780 en un sitio que es 409 00:49:35,780 --> 00:49:37,099 parecido a donde estoy. 410 00:49:38,699 --> 00:49:39,920 No he puesto un control 411 00:49:39,920 --> 00:49:41,719 que me dice, sí, pero después de haberlo movido, 412 00:49:41,800 --> 00:49:43,619 después de haber elegido el X, 413 00:49:44,059 --> 00:49:45,780 este nuevo X no puede 414 00:49:45,780 --> 00:50:10,050 estar demasiado cerca al viejo X. ¿Se entiende? Entonces, dile, pongamos esto, el nuevo X 415 00:50:10,050 --> 00:50:37,780 lo pongo igual al viejo X, mientras el nuevo X menos un cierto tamaño, pongámoslo, 416 00:50:39,300 --> 00:51:04,269 del discolagamento, es mayor, no, es, no, es, mientras el nuevo x sea incluido entre el viejo x menos 50 y más 50, 417 00:51:04,269 --> 00:51:20,300 eso es lo que quiero hacer, ¿sí? Mientras que el nuevo x sea mayor del viejo x menos algo, por ejemplo, menos 50, 418 00:51:20,780 --> 00:51:31,849 y el nuevo x sea menor que el viejo x más 50, 419 00:51:37,860 --> 00:51:38,460 cámbialo. 420 00:51:39,760 --> 00:51:41,639 Dame una cosa al azar. 421 00:51:41,639 --> 00:51:45,340 Pero esta cosa al azar, con respecto al viejo, 422 00:51:45,719 --> 00:51:49,639 es muy cerca, es entre menos 50 y más 50, 423 00:51:50,300 --> 00:51:51,599 pues cálculame otro rango. 424 00:51:52,559 --> 00:51:53,039 No me vale. 425 00:51:53,340 --> 00:51:55,239 Es demasiado cerca donde estaba antes. 426 00:51:56,119 --> 00:51:56,500 ¿Entiendes? 427 00:51:57,699 --> 00:52:04,699 Donde esté 50, en realidad podría ponerlo como un... no sé cómo llamarlo. 428 00:52:04,699 --> 00:52:09,460 Interrol. 429 00:52:09,460 --> 00:52:23,429 Minmove. 430 00:52:23,429 --> 00:52:25,429 Movimiento mínimo. 431 00:52:25,429 --> 00:52:28,429 Donde en realidad este minmove sería cuánto. 432 00:52:28,429 --> 00:52:51,360 ¿Lo veis? 433 00:52:51,360 --> 00:52:55,760 ¿Esto qué es? Debería ser un doble. 434 00:52:57,760 --> 00:53:01,070 ¿Lo veis o no? 435 00:53:01,070 --> 00:53:07,050 O sea, yo tengo un botón aquí. 436 00:53:07,050 --> 00:53:14,070 vale lo puedo meter en cualquier punto desde aquí hasta aquí vale porque hemos dicho que no hasta el 437 00:53:14,070 --> 00:53:20,050 borde porque si no me lo pinta afuera si me elige este punto aquí ningún problema lo me vaya y ya 438 00:53:20,050 --> 00:53:27,050 está el problema es si me elige un punto yo aquí tendré ratón que sea muy cerca del botón del punto 439 00:53:27,050 --> 00:53:34,150 actual si yo estoy aquí y él me lo mueve solo aquí pues mi botón mi mouse se quedaría allí 440 00:53:34,150 --> 00:53:41,710 dentro entonces yo cuando entro en algún lado me lo tiene que mover de un tamaño suficiente o sea 441 00:53:41,710 --> 00:53:53,440 me valen no me valen cualquier puntos me valen sólo los puntos entre aquí y aquí o aquí en un 442 00:53:53,440 --> 00:54:05,260 cierto sentido entonces tengo que encontrar una forma para eliminar estos puntos de aquí estos 443 00:54:05,260 --> 00:54:13,440 puntos aquí no me valen porque si el punto nuevo vale cae en uno de estos son uno de estos puntos 444 00:54:13,440 --> 00:54:21,159 rojos y yo construiría el cuadrado aquí y se ha entrado desde este lado ahora estoy dentro del 445 00:54:21,159 --> 00:54:30,420 botón entonces yo le tengo que decir oye mira muévelo pero así luego el punto nuevo está más 446 00:54:30,420 --> 00:54:37,019 está demasiado cerca con respecto al punto viejo pues no me vale y yo lo que he hecho es este nuevo 447 00:54:37,019 --> 00:54:50,340 cerca es a 50 menos y 50 más vale esto ya lo dudo como 50 el corazón en realidad como no es el centro 448 00:54:50,340 --> 00:54:58,679 del botón es el ancho pero veo que siento de este lado no me lo puede mover de uno no tiene que 449 00:54:58,679 --> 00:55:07,139 mover como mínimo del tamaño mismo del botón. Si entro de aquí, me lo tiene que mover todo el botón, 450 00:55:07,139 --> 00:55:11,699 y si entro de aquí, me lo tiene que mover todo el botón a la izquierda. Entonces el tamaño mínimo 451 00:55:11,699 --> 00:55:27,550 de este 50 en realidad no es 50, es o .build o .getbuild. Esto me vale sea cual sea el botón, 452 00:55:27,550 --> 00:55:31,929 porque si luego yo lo muevo solo de 50 y hago un botón de 200, pues ya no me funciona. 453 00:55:31,929 --> 00:55:41,650 con este de aquí lo que decía antes de no me gustan los números metidos así a secas porque 454 00:55:41,650 --> 00:55:45,969 luego hago un botón más grande y a este código no me sirve desde este código de aquí es general 455 00:55:45,969 --> 00:55:51,610 y se basa sobre el tamaño del objeto el tamaño de la ventana si tú hace la ventana más pequeña 456 00:55:51,610 --> 00:55:59,409 funciona igual la ventana de función igual y con esto me estoy diciendo mira pues ya me un nuevo 457 00:55:59,409 --> 00:56:00,769 un nuevo punto, ¿vale? 458 00:56:01,090 --> 00:56:03,110 Este nuevo punto, como mínimo, 459 00:56:03,230 --> 00:56:04,630 tiene que ser distante 460 00:56:04,630 --> 00:56:06,650 desde el viejo punto 461 00:56:06,650 --> 00:56:09,590 o punto red-white. 462 00:56:10,769 --> 00:56:11,530 Yo quiero 463 00:56:11,530 --> 00:56:13,090 un nuevo punto que sea como mínimo 464 00:56:13,090 --> 00:56:14,750 distante el tamaño mismo 465 00:56:14,750 --> 00:56:17,289 del botón. 466 00:56:17,469 --> 00:56:19,250 Entonces, que haya entrado a la izquierda, que haya entrado 467 00:56:19,250 --> 00:56:20,989 a la derecha, me da igual, porque 468 00:56:20,989 --> 00:56:23,510 se moverá lo suficiente para que el ratón 469 00:56:23,510 --> 00:56:25,289 nunca esté dentro del botón después 470 00:56:25,289 --> 00:56:25,969 de haberlo movido. 471 00:56:27,329 --> 00:56:29,389 ¿Entiendes? Quiero estar seguro 472 00:56:29,389 --> 00:56:39,809 le pongo un margen y esto si no mueve exactamente de esto pues le pongo un margen 473 00:56:40,710 --> 00:56:45,309 si el botón es muy grande igual daría un error 474 00:56:46,309 --> 00:56:52,050 si es demasiado grande pues posiblemente saldría afuera pero con que haya otra 475 00:56:52,050 --> 00:56:54,550 posición ahora si queréis como lo hacemos más grande vemos que pase 476 00:56:54,550 --> 00:57:04,030 A lo mejor se queda ahí dentro dando vueltas y cosas por el estilo hasta que no lo encuentre, 477 00:57:04,030 --> 00:57:08,309 pero aunque haya una solución debería, en cierto momento, salir. 478 00:57:08,309 --> 00:57:17,780 A lo mejor tarda mucho porque como lo está haciendo random, tardaría mucho en contar. 479 00:57:17,780 --> 00:57:26,760 Si yo hago el botón más grande que la mitad de la ventana, posiblemente no hay solución. 480 00:57:26,760 --> 00:57:38,730 se quedaría ahí, eso también podría poner un contador y decir tú intentas lo mil veces, si mil veces no has 481 00:57:38,730 --> 00:57:42,690 encontrado una solución, pues que el usuario quite el botón. 482 00:57:45,449 --> 00:57:49,710 De esta forma, nosotros así nos debería valer y debería funcionar. 483 00:57:49,809 --> 00:57:57,449 Al final, cuando tengo el nuevo X que estará lejanos al menos el movimiento mínimo desde el antiguo, pues 484 00:57:57,449 --> 00:58:08,070 Entonces, ahora debería tener esta cosa aquí que siempre salta, nunca salta un poquito. 485 00:58:08,070 --> 00:58:17,909 ¿Veis que salta? Puede saltar poco, pero nunca me encontraré dentro del botón cuando salta. 486 00:58:18,309 --> 00:58:24,130 Y siempre va desde cero hasta un límite máximo, pero siempre se ve el botón, no salta nunca afuera. 487 00:58:24,130 --> 00:58:49,110 Pues ahora pillo esto y hago lo mismo pero con i vieja, mínimo i vieja es igual, mínimo i vieja es esa y aquí hate, vale, después pongo los hate. 488 00:58:49,110 --> 00:59:01,420 In move, i, mismo i, mismo i, ahora a ver, algún i seguramente me lo perderé por la... 489 00:59:01,420 --> 00:59:29,860 Sí. Y ahora, ¿dónde está while? Te pongo height, ¿ah? Height. Y esto es height. 490 00:59:29,860 --> 00:59:43,139 ¿Vale? Entonces, ahora, como puedo suerte, esto se ha ido. Esto no está... 491 00:59:43,139 --> 00:59:46,139 ¿Por qué no está brujelín y que llega? 492 00:59:46,139 --> 00:59:49,139 Ah, porque he puesto get layout x. 493 00:59:49,139 --> 01:00:03,159 que se mueve en este cuadrado 494 01:00:03,159 --> 01:00:04,440 pero nunca 495 01:00:04,440 --> 01:00:09,699 y esto 496 01:00:09,699 --> 01:00:12,340 son aleatorios los dos 497 01:00:12,340 --> 01:00:14,579 pero este de aquí tiene esta cosa 498 01:00:14,579 --> 01:00:16,739 que cuando puede se mueve solo un poquito 499 01:00:16,739 --> 01:00:18,099 es así 500 01:00:18,099 --> 01:00:20,019 está más cerca 501 01:00:20,019 --> 01:00:22,139 mientras que este de aquí es aleatorio completamente 502 01:00:22,139 --> 01:00:28,500 ¿sí? 503 01:00:29,920 --> 01:00:30,559 ¿dudas? 504 01:00:31,679 --> 01:00:32,579 Sí, pues 505 01:00:32,579 --> 01:00:39,579 ¿Cómo era para poner que el label de te gusta programación quede como atrás de todo? 506 01:00:39,579 --> 01:00:42,579 No lo hemos hecho, no lo sé. 507 01:00:42,579 --> 01:00:46,579 Porque yo cuando paso el mouse por encima de ese label sin querer me sale un error. 508 01:00:46,579 --> 01:00:49,579 O sea, me sigue funcionando, pero me sale como un error. 509 01:00:49,579 --> 01:00:57,579 Cuando pasas el ratón encima del label, porque probablemente habrás puesto en el label un onMouseEntity. 510 01:00:57,579 --> 01:01:02,619 No tengo nada. 511 01:01:02,619 --> 01:01:14,059 Tú has puesto aquí un algo, entonces claro, cuando pases por ahí, hace algo. 512 01:01:14,059 --> 01:01:22,059 ¿Podrías poner un segundito el código del primer botón no, que pusiste todos los sigs y demás? 513 01:01:22,059 --> 01:01:33,659 Pero no lo mires, hazlo, pénsalo, o sea, los límites que tienes que poner, eso es, 514 01:01:33,659 --> 01:01:36,960 si estoy fuera de unos límites, pues entonces lo pongo al otro lado. 515 01:01:36,960 --> 01:01:41,420 A lo mejor no lo tienes grabado, luego te los pongo, pero si no... 516 01:01:41,420 --> 01:01:49,400 Vamos a ver, entonces, esto es, para ponerlo, a ver, un problema que puede surgir es si 517 01:01:49,400 --> 01:02:00,170 el botón no está justo detrás de otro es que este botón está encima entonces no daría problemas pero 518 01:02:00,170 --> 01:02:18,880 si en el aquí yo lo muevo entonces puede ser que un botón no esté detrás esto tengo que tenerlo 519 01:02:18,880 --> 01:02:24,639 cuidado ese botón nos está detrás cuando yo paso por aquí no pillará el botón ni siquiera lo pude 520 01:02:24,639 --> 01:02:33,519 decir que una forma de solucionarlo es con esto vale en la jerarquía poner que el label esté detrás 521 01:02:35,139 --> 01:02:40,780 entonces como el level es el primero es el que está detrás de todos entonces los botones 522 01:02:40,780 --> 01:02:46,840 siempre estarán por encima cuando se solapan uno a otro o estará encima de los demás el orden con 523 01:02:46,840 --> 01:02:54,719 que se hacen determina también esto ahora por otro lado yo creo vamos a ver si lo encuentro 524 01:02:56,119 --> 01:03:06,900 y tengo el botón aquí por ejemplo o punto ser porque a veces pueden puedes puedes indicar el 525 01:03:06,900 --> 01:03:14,280 zeta o sea a qué altura está vale en html por ejemplo se hace así aquí no lo sé 526 01:03:14,280 --> 01:03:18,139 ¿Veis que está también un scale z? 527 01:03:19,280 --> 01:03:22,800 Entonces, set layout z, no. 528 01:03:23,679 --> 01:03:32,460 Set z, por esto set translate z, pues sirve algo, no lo sé, habría que verlo, ¿vale? 529 01:03:33,059 --> 01:03:38,820 Pero en las interfaces la z no existe, la z sería la profundidad, ¿vale? 530 01:03:38,820 --> 01:03:46,659 Pero se puede utilizar a veces para indicar quién de los controles está más adelante y quién de los controles está más atrás. 531 01:03:46,880 --> 01:03:53,780 Entonces, si yo necesito que un control esté siempre encima de los demás porque se puede mover, pues puedo jugar con el Z para eso. 532 01:03:54,519 --> 01:04:02,900 A veces eso se puede hacer también en HTML barra CSS, a veces se hacía, porque ahora se hace con otras tecnologías, 533 01:04:02,900 --> 01:04:14,659 Pero si yo tengo dos paneles con cosas distintas en la misma ventana, en la misma página, si cambio la Z, cuando pongo la Z esta aquí, se ve el primer panel. 534 01:04:15,159 --> 01:04:19,300 Cuando le cambio la Z y pongo esta Z detrás de la otra, ahora se ve el segundo panel. 535 01:04:19,659 --> 01:04:23,679 Que sirve como para dar la ilusión de que has cambiado ventana, pero todos en la misma ventana. 536 01:04:27,730 --> 01:04:33,550 Tienes dos interfaces, una que está detrás, entonces no se ve, y una que está delante y se ve. 537 01:04:33,550 --> 01:04:45,550 Cuando tú cambias la Z, pues se vuelve a pintar y ahora se ve la que estaba detrás y la que estaba delante ahora se queda escondida. 538 01:04:46,449 --> 01:04:49,570 Pero hoy en día se suele utilizar otra cosa. 539 01:04:49,730 --> 01:04:55,230 Aquí, por ejemplo, si quiero hacer cosas así, es más elegante hacerlo con unos tabs, como hemos visto la otra vez. 540 01:04:56,230 --> 01:05:00,409 Sería la única utilidad que tiene el Z, porque esto es en 2D prácticamente, ¿no? 541 01:05:00,409 --> 01:05:01,929 El SimBusiness trabaja en 2D. 542 01:05:01,929 --> 01:05:10,630 La Z sirve sólo en caso en que el componente se solape, que no es lo normal. 543 01:05:10,630 --> 01:05:14,730 Normalmente es difícil que un botón se mueva o que una cosa se mueva. 544 01:05:14,730 --> 01:05:22,429 No suele existir el componente que cuando tú te acercas cambia en otro lado. 545 01:05:22,429 --> 01:05:23,630 Es para hacer una broma aquí. 546 01:05:23,630 --> 01:05:27,429 esto no es real 547 01:05:27,429 --> 01:05:29,429 lo que hemos hecho nosotros 548 01:05:29,429 --> 01:05:33,650 nos sirve simplemente para jugar con el setlayer 549 01:05:33,650 --> 01:05:36,429 por si en un determinado momento 550 01:05:36,429 --> 01:05:39,250 quiero mover por efecto de un botón 551 01:05:39,250 --> 01:05:41,230 un determinado elemento dentro de mi cosa 552 01:05:41,230 --> 01:05:43,289 o una lista desplegable 553 01:05:43,289 --> 01:05:45,889 y ya viene que funciona 554 01:05:45,889 --> 01:05:53,500 vale, esto lo damos por hecho