¿Qué tal todo? He aquí estoy de vuelta con más de mis prácticas de Java, para esta ocasión, un clásico conversor de unidades es lo que traigo. Esto lo he hecho antes en C++, pero esta vez tiene una interfaz gráfica y validaciones más estrictas que lo hacen mucho más manejable para el usuario común.
Esta es mi primera versión, tal y como lo comento en el título, y sí, eso asoma que quiero mejorarlo en el futuro, con arras a añadir más unidades de longitud.
What's up? Here I am back with more of my Java practices, for this occasion, a classic unit converter is what I bring. I've done this before in C++, but this time it has a graphical interface and tighter validations that make it much more manageable for the common user.
This is my first version, as I say in the title, and yes, it looks like I want to improve it in the future, with the addition of more units of length.
Para empezar la clase más importante es la clase "Control", que trae todas las funciones claves para el funcionamiento. Tanto la de validación como la de conversión. Para la de validación tuve que repasar el uso de un par de elementos de la clase javax.swing, pues no recordaba exactamente como extraer y modificar ciertos datos. Tanto en el JComboBox como en el elemento de campo de texto.
Así pues, la primera función llamada "numberValidator" se encarga precisamente de validar el texto que se recibe en el campo de texto modificable (el segundo no puede ser modificado, esta destinado solo a mostrar). De tal manera que a través de una variable bautizada como "caracter", de tipo, precisamente, caracter se recibe el caracter (valga la redundancia), que el usuario teclee. Esto para verificar que sea un número o un ".", pues es necesario que se incluyan para los números decimales.
No obstante, hay una excepción clara y es cuando se añade el . al principio sin ningún número que le anteceda, algo como ".59", esto podría interpretarse como "0.59", pero para evitar errores se incluyó la excepción que limpia el campo en caso de que quiera añadirse una cifra de esa manera, evitando así errores.
Curiosamente colocar el punto al final sin decimales no provoca errores, es decir, algo como "59.", será interpretado como "59.00". Para evitar el ingreso de los caracteres no permitidos usé el método "consume", a partir del evento que está en los parámetros de la función.
Dentro de los parámetros está el mismo campo de texto, de modo que se modifique su contenido según sea pertinente. Ya para la función de conversión llega una situación curiosa y es que l_unitConverter tiene una serie de condiciones bastante amplia, esto porque la idea es que fuese posible convertir entre las unidades: Milímetros, centímetros, decímetros, metros, decámetros, hectómetros y kilómetros.
Para ello se usan las fórmulas pertinentes fácilmente ubicables en la red, enseñadas en física de secundaria, en la primaria y refrescadas al llegar a la universidad. Sin embargo hay un par de validaciones que no siguen esta regla y son el caso de ser el mismo tipo de unidad, y de ser el número 0. En ambos caso se muestre el mismo valor en el campo 2, como es lógico, 5 metros son 5 metros y 0 metros son 0 kilómetros, decámetros, hectómetros y así sucesivamente.
Para las conversiones me apoyé en dos variables de tipo double. "numberConverted" y "numberToConvert", la primera recibe el número convertido y la primera recibe el número a convertir.
To begin with, the most important class is the "Control" class, which brings all the key functions for the operation. Both validation and conversion. For the validation I had to review the use of a couple of elements of the javax.swing class, because I did not remember exactly how to extract and modify certain data. Both in the JComboBox and in the text field element.
So, the first function called "numberValidator" is precisely in charge of validating the text that is received in the modifiable text field (the second one cannot be modified, it is intended only to display). In such a way that through a variable named "character", of type, precisely, character, it receives the character (redundancy), that the user types. This to verify that it is a number or a ".", since it is necessary that they are included for decimal numbers.
However, there is a clear exception and it is when the . is added at the beginning without any number before it, something like ".59", this could be interpreted as "0.59", but to avoid errors was included the exception that clears the field in case you want to add a number in that way, thus avoiding errors.
Interestingly, placing the period at the end without decimals does not cause errors, i.e., something like "59.", will be interpreted as "59.00". To avoid the input of the not allowed characters I used the method "consume", from the event that is in the parameters of the function.
Within the parameters is the text field itself, so that its content can be modified as appropriate. Already for the conversion function comes a curious situation and is that l_unitConverter has a fairly broad set of conditions, this because the idea is that it was possible to convert between units: millimeters, centimeters, decimeters, meters, decameters, hectometers and kilometers.
To do this we use the relevant formulas easily found on the web, taught in high school physics, in elementary school and refreshed at the university. However, there are a couple of validations that do not follow this rule and they are the case of being the same type of unit, and being the number 0. In both cases the same value is shown in field 2, as it is logical, 5 meters are 5 meters and 0 meters are 0 kilometers, decameters, hectometers and so on.
For the conversions I relied on two variables of type double. "numberConverted" and "numberToConvert", the first one receives the converted number and the first one receives the number to convert.
Ya para la clase vista es en gran medida código generado por Apache NetBeans 19. de la plantilla de clase JFrame, pues a partir del apartado de diseño es mucho más fácil crear las interfaces. Donde varié fue en el field1KeyType, que es la clase en la que se habilitan las validaciones y en el método de acción del botón está el conversor. La clase final es un simple "main" en el que se habilita la interfaz y los controladores.
Already for the view class is largely code generated by Apache NetBeans 19. from the JFrame class template, because from the design section it is much easier to create the interfaces. Where I varied was in the field1KeyType, which is the class where the validations are enabled and in the button action method is the converter. The final class is a simple "main" in which the interface and controllers are enabled.
Y pues eso ha sido todo, mi plan para la versión 2.0 es añadir unidades extranjeras de longitud, mejorar el diseño para que no sea tan simple, colocarle un ícono y quizás un logo para identificarlo con mi cuenta. Seguimos adelante en el proceso de aprendizaje, pues invertir en conocimiento es invertir en tu futuro.
El video que consulté para repasar las validaciones lo dejaré por acá abajo. Respecto al curso de Java, llevo actualmente un 18%.
So that's it, my plan for version 2.0 is to add foreign units of length, improve the design so it's not so simple, put an icon and maybe a logo to identify it with my account. We go on with the learning process, because investing in knowledge is investing in your future.
The video I consulted to review the validations is below. Regarding the Java course, I am currently 18% complete.