Passer au contenu principal

Modernisation de Swing

Du Swing au Web, Un écran à la fois

Votre application Swing, JavaFX ou SWT s’exécute dans un navigateur web sans modifier son code source. Vous créez ensuite de nouveaux écrans avec webforJ et remplacez les anciens à votre rythme. L’équipe Java et le code restent en place.

Bibliothèques d’interface de bureau : Swing, JavaFX et SWT
3
Modifications du code source pour l’exécution dans un navigateur
0
Clients
  • ClientsSwing
  • CommandeswebforJ
  • RapportsSwing
Appli Swing en streaming
Tableau des clients
FichierModifierAfficher
NomÉquipeVille
Hyyan Abo FakherVentesBerlin
Matthew HawkinsAssistanceBoston
Eric HandtkeFinanceHamburg
Ben BrennanVentesDenver
Garrison OsteenAssistanceAustin
Lauren AlamoFinancePhoenix

Modifier le client

AnnulerEnregistrer
Boîte de dialogue webforJ
Un double-clic dans le tableau Swing ouvre une boîte de dialogue webforJ au lieu de l’ancienne boîte de dialogue Swing. Les deux s’affichent dans le même onglet du navigateur.

Ce qui reste inchangé

Uniquement les écrans Modifier

webforJ est le framework Java full-stack dédié aux applications web métier : vous créez toute l’application, écrans compris, en Java. Migrer une application Swing revient donc à migrer ses écrans, et tout ce qui les sous-tend est conservé.

Quels changements ?

Les écrans. Vous les déplacez un par un, selon l’ordre qui compte pour votre activité, tandis que le reste de l’application Swing continue de fonctionner dans le même onglet du navigateur.

  1. 01

    L’équipe

    Les personnes qui maintiennent aujourd’hui l’application Swing créent les interfaces web en Java. Pas besoin d’une deuxième équipe ni d’apprendre une chaîne d’outils front-end.

  2. 02

    Le code

    Webswing exécute l’application telle quelle. Le même code continue de fonctionner comme application de bureau et dans le navigateur : vous ne maintenez qu’une seule application, pas deux.

  3. 03

    La logique

    Les classes de domaine, les services et les règles de validation sans rapport avec javax.swing sont appelés directement depuis les nouveaux écrans. Ils ne deviennent pas d’abord des points de terminaison.

  4. 04

    La chaîne d’outils

    Maven, votre IDE, votre débogueur et vos tests existants continuent de s’appliquer.

Le déplacement en trois phases

Suivre le déplacement pas à pas Du bureau au web

Chaque phase apporte un élément visible par les utilisateurs. Choisissez une phase pour voir l’écran correspondant et le code qui le fait fonctionner.

Tableau des clients
FichierModifierAfficher
NomÉquipeVille
Hyyan Abo FakherVentesBerlin
Matthew HawkinsAssistanceBoston
Eric HandtkeFinanceHamburg
Ben BrennanVentesDenver
Garrison OsteenAssistanceAustin
Lauren AlamoFinancePhoenix

Lancer l’application de bureau dans le navigateur

Webswing exécute votre application Swing, JavaFX ou SWT sur le serveur et diffuse son interface dans le navigateur sous forme de canevas HTML5. Les entrées de la souris et du clavier sont transmises à l’application réelle. Le code source reste inchangé.

Intégrez-le dans une vue webforJ avec WebswingConnector. Le connecteur se connecte au serveur Webswing lorsqu’il est ajouté à la page.

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);
}
}

Phase 1 sur 3

Communication bidirectionnelle

Anciens et nouveaux écrans Parler entre eux

Un message est une action : un nom, une charge utile textuelle facultative et une charge utile binaire facultative. Le nom est libre. Les deux extrémités étant en Java pur, personne n’a besoin d’écrire de script pour le navigateur.

  1. 1

    Swing annonce

    Un double-clic envoie select-customer avec la ligne au format JSON. Sur ordinateur, le même clic ouvre toujours la boîte de dialogue 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

    Réponses de webforJ

    Lors de l’enregistrement, le formulaire web renvoie update-customer et l’application Swing actualise son tableau. Aucun des deux ne fait appel aux mécanismes internes de l’autre.

    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));
    });

Envoyer des commandes à Swing

performAction() envoie un nom seul ou accompagné de données. L’application Swing détermine la signification de chaque nom.

Envoi d’actions
// Trigger a refresh in the Swing application from webforJ
connector.performAction("refresh");

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

Savoir quand Swing est prêt

onInitialize est appelé lorsque la connexion est prête. onStart est appelé lorsque l’application Swing est entièrement chargée. Envoyez votre première action depuis onStart.

Événements du cycle de vie
connector.onInitialize(e -> status.setText("Connected"));
connector.onStart(e -> status.setText("Swing app running"));

Porter avec un assistant IA

Laissez un assistant le porter, écran par écran

Passer d’un écran à l’autre est une tâche répétitive, idéale pour un assistant de programmation IA. Le plug-in IA webforJ le connecte au serveur MCP webforJ et aux Agent Skills, des workflows structurés qui lui indiquent quand utiliser ces outils, dans quel ordre et comment valider le résultat.

  1. 1

    Donnez-lui un écran Swing.

    Demandez l’équivalent webforJ qui appelle vos services existants.

  2. 2

    Cela vérifie l’API réelle.

    Le serveur MCP consulte à la demande la documentation et les détails de l’API de webforJ, plutôt que de deviner.

  3. 3

    Vous relisez et testez

    Comparez le comportement avec la version Swing d’origine, puis passez à l’écran suivant.

Comment démarrer

À partir d’un fichier JAR vers une page dans le navigateur

Vous avez besoin d’une application Swing, JavaFX ou SWT empaquetée dans un fichier JAR, du serveur Webswing et de webforJ 25.10 ou version ultérieure.

  1. 1

    Télécharger et lancer Webswing

    Téléchargez Webswing, extrayez l’archive, puis démarrez le serveur avec le script correspondant à votre plateforme. Il est accessible à l’adresse http://localhost:8080.

    Webswing
    webswing.sh
  2. 2

    Enregistrez votre application

    Dans la console d’administration de http://localhost:8080/admin, définissez le nom de l’application, la classe principale, le classpath, les arguments JVM et le répertoire de base. L’application est ensuite accessible à l’adresse http://localhost:8080/[app-name]/.

    CORS
    Ajoutez l’origine de votre application webforJ aux origines autorisées, par exemple http://localhost:8090.
    Ports
    Les deux utilisent généralement le port 8080. Modifiez-en un pour éviter tout conflit.
  3. 3

    Ajouter la dépendance

    Le module webforj-webswing fournit WebswingConnector et les classes associées.

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

    Intégrer et configurer

    Ajoutez un WebswingConnector à une vue, comme lors de la phase 1. WebswingOptions modifie son comportement, par exemple en masquant le bouton de déconnexion lorsque votre application webforJ gère la connexion.

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

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

    connector.setOptions(options);