Communication
The WebswingConnector provides bidirectional communication between your webforJ app and the embedded Swing app. This enables you to send commands to the Swing app and receive notifications when events occur within it.
Sending actions to Swing
The performAction() method allows your webforJ app to trigger functionality in the Swing app. This is useful for synchronizing state, triggering updates, or controlling the Swing app's behavior from the web interface.
For example, if your Swing app has a custom action handler for refreshing data:
// Trigger a refresh in the Swing application from webforJ
connector.performAction("refresh");
You can also send data along with the action. The Swing app receives this through its Webswing API integration:
// Send a command with data from webforJ
connector.performAction("selectRecord", "12345");
// Send binary data
byte[] fileContent = Files.readAllBytes(path);
connector.performAction("uploadDocument", "invoice.pdf", new String(fileContent));
The action names and expected data formats are defined by your Swing app's implementation.
Receiving events from Swing
The connector fires three types of events that notify your webforJ app about the Swing app's state and actions.
Lifecycle events
The initialize event fires when the Webswing connection is established and ready for communication:
connector.onInitialize(event -> {
// Connection established
connector.getInstanceId().ifPresent(id ->
console.log("Connected to Webswing instance: " + id)
);
});
The start event fires when the Swing app has fully loaded and is running:
connector.onStart(event -> {
// Swing application is now visible and interactive
console.log("Application ready for user interaction");
});
Custom action events
When your Swing app sends custom actions back to the web interface using the Webswing Java API, these are received as action events:
connector.onAction(event -> {
String actionName = event.getActionName();
switch(actionName) {
case "dataUpdated":
event.getActionData().ifPresent(data -> {
// Handle the update notification
updateWebInterface(data);
});
break;
case "fileReady":
event.getActionBinaryData().ifPresent(data -> {
// Binary data
saveFile(fileData);
});
break;
}
});
Moving a desktop Java app to the web?
Send us a screenshot of one screen and we'll reply with how it moves to webforJ.
Keep learning
ArticleRun a Java Swing Application in the Browser Without a Rewrite
ArticleStrangler Fig Pattern for a Java Swing App, Step by Step
ArticleMigrate a Java desktop app to the web with AI: a decision guide
ArticleJava Swing to web migration: pick the right path
ArticleSwing to JavaScript communication with webforJ and Webswing
ArticleJava Swing technical debt: what staying costs you