Saltar al contenido principal

Modernización de Swing

De Swing a la web, Una pantalla a la vez

Tu aplicación Swing, JavaFX o SWT se ejecuta en un navegador web sin modificar el código fuente. Después, creas nuevas pantallas con webforJ y sustituyes las antiguas a tu propio ritmo. El equipo de Java y el código permanecen.

Bibliotecas de escritorio: Swing, JavaFX y SWT
3
Cambios en el código fuente para ejecutarse en un navegador
0
Clientes
  • ClientesSwing
  • PedidoswebforJ
  • InformesSwing
Aplicación Swing en streaming
Tabla de clientes
ArchivoEditarVer
NombreEquipoCiudad
Hyyan Abo FakherVentasBerlin
Matthew HawkinsSoporteBoston
Eric HandtkeFinanzasHamburg
Ben BrennanVentasDenver
Garrison OsteenSoporteAustin
Lauren AlamoFinanzasPhoenix

Editar cliente

CancelarGuardar
Diálogo de webforJ
Al hacer doble clic en la tabla Swing, se abre un diálogo de webforJ en lugar del antiguo diálogo de Swing. Ambos se ejecutan en la misma pestaña del navegador.

Qué se mantiene igual

Solo las pantallas Cambiar

webforJ es el framework Java full-stack para aplicaciones web empresariales: creas toda la aplicación, incluidas las pantallas, en Java. Así que migrar una aplicación Swing implica migrar sus pantallas, y todo lo que hay detrás se conserva.

Qué cambia

Las pantallas. Las mueves de una en una, en el orden que más le importa a tu negocio, mientras el resto de la aplicación Swing sigue ejecutándose en la misma pestaña del navegador.

  1. 01

    El equipo

    Quienes mantienen hoy la aplicación Swing crean las pantallas web en Java. No hay un segundo equipo ni herramientas de frontend que aprender.

  2. 02

    El código

    Webswing ejecuta la aplicación tal cual. La misma base de código funciona tanto como aplicación de escritorio como en el navegador, así que mantienes una sola aplicación, no dos.

  3. 03

    La lógica

    Las clases de dominio, los servicios y las reglas de validación que no tienen nada que ver con javax.swing se llaman directamente desde las nuevas pantallas. No se convierten primero en endpoints.

  4. 04

    La cadena de herramientas

    Maven, tu IDE, tu depurador y tus pruebas existentes siguen siendo aplicables.

El traslado, en tres fases

Recorrer el movimiento paso a paso Del escritorio a la web

Cada fase ofrece algo que los usuarios pueden ver. Elige una fase para ver la pantalla en ese momento y el código que la hace funcionar.

Tabla de clientes
ArchivoEditarVer
NombreEquipoCiudad
Hyyan Abo FakherVentasBerlin
Matthew HawkinsSoporteBoston
Eric HandtkeFinanzasHamburg
Ben BrennanVentasDenver
Garrison OsteenSoporteAustin
Lauren AlamoFinanzasPhoenix

Ejecutar la aplicación de escritorio en el navegador

Webswing ejecuta tu aplicación Swing, JavaFX o SWT en el servidor y transmite su interfaz al navegador como un lienzo HTML5. Las entradas del ratón y el teclado llegan a la aplicación real. El código fuente no cambia.

Incrústelo en una vista de webforJ con WebswingConnector. El conector se conecta al servidor de Webswing cuando se añade a la página.

SwingAppView.java
@Route
public class SwingAppView extends Composite<Div> {
private final Div self = getBoundComponent();
private WebswingConnector connector;

public SwingAppView() {
// Initialize the connector with your Webswing application URL
connector = new WebswingConnector("http://localhost:8080/myapp/");

// Set the display dimensions
connector.setSize("100%", "600px");

// Add to the view container
self.add(connector);
}
}

Fase 1 de 3

Comunicación bidireccional

Pantallas antiguas y nuevas Hablar entre sí

Un mensaje es una acción: un nombre, una carga útil de texto opcional y una carga útil binaria opcional. Tú eliges el nombre. Ambos extremos usan Java puro, así que nadie escribe código de navegador para el intercambio.

  1. 1

    Swing anuncia

    Un doble clic envía select-customer con la fila en formato JSON. En escritorio, el mismo clic sigue abriendo el diálogo de Swing.

    Application.java (Swing)
    private void handleDoubleClick(MouseEvent e) {
    int row = table.rowAtPoint(e.getPoint());
    if (row >= 0 && row < customers.size()) {
    Customer customer = customers.get(row);

    if (isWebswing) {
    api.sendActionEvent("select-customer", gson.toJson(customer), null);
    } else {
    showEditDialog(customer);
    }
    }
    }
    CustomerBridgeView.java (webforJ)
    connector.onAction(e -> {
    switch (e.getActionName()) {
    case "select-customer" -> e.getActionData().ifPresent(this::openEditor);
    case "export-ready" -> e.getActionBinaryData()
    .ifPresent(d -> status.setText("Got " + d.length() + " characters"));
    default -> { }
    }
    });
  2. 2

    Respuestas de webforJ

    Al guardar, el formulario web envía update-customer de vuelta y la aplicación Swing actualiza su tabla. Ninguna de las partes accede a los detalles internos de la otra.

    Application.java (Swing)
    private void setupWebswingListeners() {
    api.addBrowserActionListener(event -> {
    if ("update-customer".equals(event.getActionName())) {
    Customer updated = gson.fromJson(event.getData(), Customer.class);
    updateCustomer(updated);
    }
    });
    }
    CustomerTableView.java (webforJ)
    dialog.onSave(() -> {
    // Send updated customer back to Swing
    connector.performAction("update-customer", gson.toJson(customer));
    });

Enviar comandos a Swing

performAction() envía un nombre solo o un nombre con datos. La aplicación Swing decide qué significa cada nombre.

Enviando acciones
// Trigger a refresh in the Swing application from webforJ
connector.performAction("refresh");

// Send a command with data from webforJ
connector.performAction("selectRecord", "12345");

Saber cuándo Swing está listo

onInitialize se ejecuta cuando la conexión está lista. onStart se ejecuta cuando la aplicación Swing se ha cargado por completo. Envía tu primera acción desde onStart.

Eventos del ciclo de vida
connector.onInitialize(e -> status.setText("Connected"));
connector.onStart(e -> status.setText("Swing app running"));

Portar con un asistente de IA

Deja que un asistente lo porte, pantalla por pantalla

Avanzar pantalla por pantalla es un trabajo repetitivo, ideal para un asistente de programación con IA. El complemento de IA de webforJ lo conecta con el servidor MCP de webforJ y con Agent Skills, flujos de trabajo estructurados que le indican cuándo usar esas herramientas, en qué orden y cómo validar el resultado.

  1. 1

    Dale una pantalla Swing.

    Solicita el equivalente de webforJ que invoque tus servicios existentes.

  2. 2

    Comprueba la API real

    El servidor MCP consulta la documentación y los detalles de la API de webforJ bajo demanda, en lugar de hacer suposiciones.

  3. 3

    Revisas y pruebas

    Compara el comportamiento con el original de Swing y luego pasa a la siguiente pantalla.

Cómo empezar

Desde un archivo JAR a una página en el navegador

Necesitas una aplicación Swing, JavaFX o SWT empaquetada en un archivo JAR, el servidor Webswing y webforJ 25.10 o posterior.

  1. 1

    Descargar e iniciar Webswing

    Descarga Webswing, extrae el archivo y luego inicia el servidor con el script de tu plataforma. Responde en http://localhost:8080.

    Webswing
    webswing.sh
  2. 2

    Registra tu app

    En la consola de administración en http://localhost:8080/admin, configura el nombre de la aplicación, la clase principal, la ruta de clases, los argumentos de la JVM y el directorio de inicio. La aplicación estará disponible en http://localhost:8080/[app-name]/.

    CORS
    Añade el origen de tu aplicación webforJ a Orígenes permitidos, por ejemplo http://localhost:8090.
    Puertos
    Ambos suelen usar el puerto 8080. Cambia uno para evitar conflictos.
  3. 3

    Añadir dependencia

    El módulo webforj-webswing proporciona WebswingConnector y las clases relacionadas.

    <dependency>
    <groupId>com.webforj</groupId>
    <artifactId>webforj-webswing</artifactId>
    <version>${webforj.version}</version>
    </dependency>
  4. 4

    Incrustar y configurar

    Añade un WebswingConnector a una vista, como en la fase 1. WebswingOptions cambia su comportamiento; por ejemplo, oculta el botón de cierre de sesión cuando tu aplicación webforJ gestiona el inicio de sesión.

    WebswingConnector connector = new WebswingConnector("http://localhost:8080/myapp/");

    WebswingOptions options = new WebswingOptions()
    .setDisableLogout(true); // Hide the logout button

    connector.setOptions(options);