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
- ClientesSwing
- PedidoswebforJ
- InformesSwing
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.
- 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.
- 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.
- 03
La lógica
Las clases de dominio, los servicios y las reglas de validación que no tienen nada que ver con
javax.swingse llaman directamente desde las nuevas pantallas. No se convierten primero en endpoints. - 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.
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.
@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
Swing anuncia
Un doble clic envía
select-customercon 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
Respuestas de webforJ
Al guardar, el formulario web envía
update-customerde 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 Swingconnector.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.
// 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.
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
Dale una pantalla Swing.
Solicita el equivalente de webforJ que invoque tus servicios existentes.
- 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
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
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.sh - 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 enhttp://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
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
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 buttonconnector.setOptions(options);
Elige tu primera pantalla
Empieza con una lista sencilla y un formulario de edición. Incrusta la aplicación, migra esa pantalla a webforJ y comprueba cómo funciona junto con el resto.
- Descripción general de WebswingQué resuelve Webswing y cómo funcionan juntas las tres capas.
- Instalación y configuraciónInstalación del servidor, consola de administración, CORS y opciones del conector.
- ComunicaciónCada acción y evento entre webforJ y la aplicación Swing.
- Tutorial de modernizaciónUna tabla de clientes de Swing integrada con un cuadro de diálogo de edición de webforJ.
- Plugin de IA de webforJEl servidor MCP y las Agent Skills para tu asistente de programación.
- Inicio de la documentaciónTodo lo demás en webforJ, desde el primer proyecto hasta los componentes.