Este repositorio contiene un proyecto de ejemplo que demuestra cómo crear una aplicación de escritorio simple utilizando Kotlin y JavaFX. La aplicación es una calculadora básica que permite sumar dos números, diseñada para estudiantes principiantes que desean aprender Kotlin y JavaFX. Incluye una guía de aprendizaje completa para introducir las características clave de Kotlin y los pasos para configurar y ejecutar el proyecto en IntelliJ IDEA.
Kotlin es un lenguaje de programación moderno, estáticamente tipado, desarrollado por JetBrains. Es conciso, seguro y completamente interoperable con Java, lo que lo hace ideal para aplicaciones de escritorio (como esta con JavaFX), Android y desarrollo web.
- Seguridad contra Nulos: Reduce errores de puntero nulo al distinguir entre tipos anulables (
String?) y no anulables (String). - Sintaxis Concisa: Menos código repetitivo gracias a la inferencia de tipos, clases de datos y funciones simplificadas.
- Interoperabilidad con Java: Funciona perfectamente con bibliotecas de Java, como JavaFX.
- Funciones de Extensión: Permite añadir funcionalidad a clases existentes sin modificarlas.
- Corrutinas: Simplifica la programación asíncrona, útil para tareas como actualizaciones de UI.
- Casts Inteligentes: Convierte tipos automáticamente cuando se cumplen ciertas condiciones.
- Clases de Datos: Simplifica la creación de clases para almacenar datos con métodos automáticos como
toString(),equals()yhashCode(). - Programación Funcional: Soporta funciones de orden superior, lambdas e inmutabilidad.
- IntelliJ IDEA: Descarga la edición Community o Ultimate desde JetBrains.
- JDK: Versión 11 o superior (por ejemplo, OpenJDK o Oracle JDK).
- JavaFX SDK: Descarga el SDK desde Gluon y extráelo en una ubicación conocida.
- Abre IntelliJ IDEA y selecciona File > New > Project.
- Elige Kotlin en el menú izquierdo, selecciona JVM | IDEA como plantilla y configura el JDK a 11 o superior.
- Nombra el proyecto (por ejemplo,
KotlinJavaFXDemo), elige una ubicación y haz clic en Finish. - Agrega el JavaFX SDK:
- Ve a File > Project Structure > Libraries, haz clic en
+, selecciona Java y agrega la carpetalibdel JavaFX SDK.
- Ve a File > Project Structure > Libraries, haz clic en
- Configura el módulo:
- En Project Structure > Modules, asegúrate de que el módulo use el mismo JDK y agrega el JavaFX SDK como dependencia.
Para ejecutar una aplicación JavaFX, configura las opciones de la máquina virtual (VM):
- Ve a Run > Edit Configurations.
- Agrega una nueva configuración de Application.
- Establece la clase principal como
com.example.MainApp. - Agrega las siguientes opciones de VM, reemplazando
/ruta/a/javafx-sdkcon la ubicación real:--module-path /ruta/a/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml - Configura el directorio de trabajo como la raíz del proyecto.
Crea la siguiente estructura en src/main/kotlin/com/example:
MainApp.kt: Clase principal de la aplicación.MainController.kt: Controlador para la lógica de la UI.main.fxml: Archivo de diseño de la UI ensrc/main/resources/com/example.
Este proyecto crea una calculadora básica que suma dos números. A continuación, se detallan los archivos del proyecto con comentarios explicativos.
Archivo: src/main/resources/com/example/main.fxml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Importando componentes de JavaFX para el diseño FXML -->
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Button?>
<!-- Elemento raíz es un VBox para un diseño vertical -->
<VBox alignment="CENTER" spacing="10" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.MainController">
<!-- Agregando padding al VBox -->
<padding>
<Insets top="20" right="20" bottom="20" left="20"/>
</padding>
<!-- Etiqueta para mostrar el resultado -->
<Label fx:id="resultLabel" text="Resultado: 0"/>
<!-- Campos de texto para entrada -->
<TextField fx:id="number1Field" promptText="Ingresa el primer número"/>
<TextField fx:id="number2Field" promptText="Ingresa el segundo número"/>
<!-- Botón para activar el cálculo -->
<Button fx:id="addButton" text="Sumar" onAction="#addNumbers"/>
</VBox>Archivo: src/main/kotlin/com/example/MainController.kt
package com.example
import javafx.fxml.FXML
import javafx.scene.control.Label
import javafx.scene.control.TextField
// Clase controlador para manejar la lógica de la UI
class MainController {
// Anotaciones FXML vinculan estos campos con los elementos del FXML
@FXML
lateinit var resultLabel: Label // Etiqueta para mostrar el resultado
@FXML
lateinit var number1Field: TextField // Primer campo de entrada
@FXML
lateinit var number2Field: TextField // Segundo campo de entrada
// Función para manejar el clic del botón y realizar la suma
@FXML
fun addNumbers() {
// Usando seguridad contra nulos de Kotlin y conversión de tipos
val num1 = number1Field.text.toDoubleOrNull() ?: 0.0
val num2 = number2Field.text.toDoubleOrNull() ?: 0.0
// Calculando la suma
val sum = num1 + num2
// Actualizando la etiqueta con el resultado
resultLabel.text = "Resultado: $sum"
}
}Archivo: src/main/kotlin/com/example/MainApp.kt
package com.example
import javafx.application.Application
import javafx.fxml.FXMLLoader
import javafx.scene.Scene
import javafx.stage.Stage
// Clase principal de la aplicación que extiende de JavaFX Application
class MainApp : Application() {
// Sobrescribiendo el método start para configurar la aplicación JavaFX
override fun start(primaryStage: Stage) {
// Cargando el archivo FXML
val fxmlLoader = FXMLLoader(MainApp::class.java.getResource("/com/example/main.fxml"))
// Creando la escena con el FXML cargado
val scene = Scene(fxmlLoader.load(), 300.0, 200.0)
// Estableciendo el título de la ventana
primaryStage.title = "Calculadora Kotlin con JavaFX"
// Configurando la escena en la ventana
primaryStage.scene = scene
// Mostrando la ventana
primaryStage.show()
}
}
// Función principal para lanzar la aplicación
fun main() {
Application.launch(MainApp::class.java)
}- Clona el repositorio:
git clone https://github.com/tu-usuario/kotlin-javafx-calculator.git
- Abre el proyecto en IntelliJ IDEA (File > Open).
- Configura el JavaFX SDK y las opciones de VM como se describió anteriormente.
- Haz clic en Run o selecciona Run > Run 'MainApp'.
- Se abrirá una ventana con dos campos de texto, un botón "Sumar" y una etiqueta para el resultado.
- Ingresa un número en el primer campo de texto.
- Ingresa otro número en el segundo campo de texto.
- Haz clic en el botón Sumar para ver el resultado en la etiqueta.
- Diseño FXML: Define la interfaz gráfica usando XML, vinculada al controlador mediante
fx:controller. - Controlador: Maneja las entradas del usuario y actualiza la UI. Usa seguridad contra nulos (
toDoubleOrNull) y plantillas de cadenas ($sum). - Aplicación Principal: Carga el FXML, configura la ventana de JavaFX y lanza la aplicación.
- Características de Kotlin Demostradas:
- Seguridad contra Nulos: Uso de
lateinitytoDoubleOrNull. - Sintaxis Concisa: Definiciones simplificadas de clases y funciones.
- Interoperabilidad: Integración con clases de JavaFX.
- Seguridad contra Nulos: Uso de
- Practica la Seguridad contra Nulos: Usa
?para variables que puedan ser nulas y evita errores en tiempo de ejecución. - Usa Clases de Datos: Por ejemplo,
data class Persona(val nombre: String, val edad: Int)para datos simples. - Explora Corrutinas: Aprende corrutinas para tareas asíncronas en proyectos avanzados.
- Aprovecha IntelliJ IDEA: Usa autocompletado y sugerencias para aprender la sintaxis de Kotlin.
- Consulta la Documentación: Visita la documentación oficial de Kotlin para más detalles.
- Mejora la calculadora para soportar resta, multiplicación y división.
- Explora controles de JavaFX como
ChoiceBoxoTableViewpara interfaces más complejas. - Experimenta con corrutinas de Kotlin para tareas en segundo plano en JavaFX.
¡Las contribuciones son bienvenidas! Sigue estos pasos:
- Haz un fork del repositorio.
- Crea una nueva rama (
git checkout -b mejora-nueva). - Realiza tus cambios y haz commit (
git commit -m 'Descripción de cambios'). - Sube la rama (
git push origin mejora-nueva). - Crea un Pull Request.
Este proyecto está bajo la Licencia MIT.