Siirry pääsisältöön

Swingin modernisointi

Swingistä verkkoon, Yksi näyttö kerrallaan

Swing-, JavaFX- tai SWT-sovelluksesi toimii selaimessa ilman lähdekoodin muutoksia. Rakenna sitten uusia näkymiä webforJ:llä ja korvaa vanhat omaan tahtiisi. Java-tiimi ja koodi säilyvät.

Työpöytäkäyttöliittymäkirjastot: Swing, JavaFX ja SWT
3
Lähdekoodimuutokset selaimessa suoritettaviksi
0
Asiakkaat
  • AsiakkaatSwing
  • TilauksetwebforJ
  • RaportitSwing
Suoratoistettu Swing-sovellus
Asiakastaulukko
TiedostoMuokkaaNäytä
NimiTiimiKaupunki
Hyyan Abo FakherMyyntiBerlin
Matthew HawkinsTukiBoston
Eric HandtkeTalousHamburg
Ben BrennanMyyntiDenver
Garrison OsteenTukiAustin
Lauren AlamoTalousPhoenix

Muokkaa asiakasta

PeruutaTallenna
webforJ-valintaikkuna
Swing-taulukon kaksoisnapsautus avaa vanhan Swing-valintaikkunan sijaan webforJ-valintaikkunan. Molemmat toimivat samassa selaimen välilehdessä.

Mikä pysyy samana

Vain näytöt Muuta

webforJ on täyden pinon Java-kehys yritysten verkkosovelluksille: rakennat koko sovelluksen näkymineen Java-kielellä. Swing-sovelluksen siirtäminen tarkoittaa siis sen näkymien siirtämistä, jolloin kaikki niiden alla oleva siirtyy mukana.

Mitä muutoksia

Näytöt. Siirrät niitä yksi kerrallaan liiketoimintasi kannalta tärkeässä järjestyksessä, samalla kun muu Swing-sovellus jatkaa toimintaansa samassa selaimen välilehdessä.

  1. 01

    Tiimi

    Swing-sovellusta nykyään ylläpitävät kehittäjät rakentavat verkkonäkymät Javalla. Erillistä tiimiä tai opeteltavaa front-end-työkaluketjua ei ole.

  2. 02

    Koodi

    Webswing ajaa sovellusta sellaisenaan. Sama koodikanta toimii sekä työpöytäsovelluksena että selaimessa, joten ylläpidät yhtä sovellusta kahden sijaan.

  3. 03

    Logiikka

    Domain-luokkia, palveluita ja validointisääntöjä, joilla ei ole mitään tekemistä javax.swing:n kanssa, kutsutaan suoraan uusista näytöistä. Niistä ei ensin tehdä päätepisteitä.

  4. 04

    Työkaluketju

    Maven, IDE:si, debuggerisi ja nykyiset testisi ovat edelleen käytössä.

Siirto kolmessa vaiheessa

Etene siirto vaiheittain Työpöydältä verkkoon

Jokaisessa vaiheessa syntyy jotain käyttäjille näkyvää. Valitse vaihe nähdäksesi sen aikaisen näkymän ja koodin, jolla se toimii.

Asiakastaulukko
TiedostoMuokkaaNäytä
NimiTiimiKaupunki
Hyyan Abo FakherMyyntiBerlin
Matthew HawkinsTukiBoston
Eric HandtkeTalousHamburg
Ben BrennanMyyntiDenver
Garrison OsteenTukiAustin
Lauren AlamoTalousPhoenix

Suorita työpöytäsovellus selaimessa

Webswing suorittaa Swing-, JavaFX- tai SWT-sovelluksesi palvelimella ja välittää sen käyttöliittymän selaimeen HTML5-canvasina. Hiiri- ja näppäimistösyötteet välittyvät takaisin varsinaiseen sovellukseen. Lähdekoodia ei tarvitse muuttaa.

Upota se webforJ-näkymään WebswingConnectorilla. Yhdistin muodostaa yhteyden Webswing-palvelimeen, kun se lisätään sivulle.

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

Vaihe 1/3

Kaksisuuntainen viestintä

Vanhat ja uudet näytöt Keskustele keskenään

Viesti on toiminto: sillä on itse keksimäsi nimi, valinnainen merkkijonosisältö ja valinnainen binäärisisältö. Kummassakin päässä käytetään tavallista Javaa, joten viestinvaihtoa varten ei tarvitse kirjoittaa selainkoodia.

  1. 1

    Swing ilmoittaa

    Kaksoisnapsautus lähettää rivin JSON-muodossa toiminnolle select-customer. Työpöytäsovelluksessa sama napsautus avaa edelleen Swing-valintaikkunan.

    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

    webforJ-vastaukset

    Tallennettaessa verkkolomake lähettää update-customer-arvon takaisin, ja Swing-sovellus päivittää taulukkonsa. Kumpikaan osapuoli ei kutsu toisen sisäisiä toimintoja.

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

Lähetä komentoja Swingiin

performAction() lähettää joko pelkän nimen tai nimen ja dataa. Swing-sovellus päättää, mitä kukin nimi tarkoittaa.

Toimintojen lähettäminen
// Trigger a refresh in the Swing application from webforJ
connector.performAction("refresh");

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

Tiedä, milloin Swing on valmis.

onInitialize suoritetaan, kun yhteys on valmis. onStart suoritetaan, kun Swing-sovellus on latautunut kokonaan. Lähetä ensimmäinen toimintosi onStartista.

Elinkaaritapahtumat
connector.onInitialize(e -> status.setText("Connected"));
connector.onStart(e -> status.setText("Swing app running"));

Siirrä tekoälyavustajan avulla

Anna avustajan siirtää se, Näyttö kerrallaan

Näytöltä toiselle eteneminen on toistuvaa työtä, joten se sopii tekoälykoodausavustajalle. webforJ AI -laajennus yhdistää sen webforJ MCP -palvelimeen ja Agent Skills -toimintoihin eli jäsenneltyihin työnkulkuihin, jotka kertovat, milloin työkaluja käytetään, missä järjestyksessä ja miten tulos tarkistetaan.

  1. 1

    Anna sille yksi Swing-näyttö

    Pyydä webforJ-vastinetta, joka kutsuu olemassa olevia palveluitasi.

  2. 2

    Se tarkistaa todellisen API:n.

    MCP-palvelin hakee webforJ-dokumentaatiota ja API-tietoja tarpeen mukaan arvailun sijaan.

  3. 3

    Tarkistat ja testaat

    Vertaa toimintaa Swing-alkuperäiseen versioon ja siirry sitten seuraavaan näyttöön.

Näin pääset alkuun

JAR-tiedostosta selaimessa olevalle sivulle

Tarvitset JAR-tiedostoksi pakatun Swing-, JavaFX- tai SWT-sovelluksen, Webswing-palvelimen sekä webforJ-version 25.10 tai uudemman.

  1. 1

    Lataa ja käynnistä Webswing

    Lataa Webswing, pura arkisto ja käynnistä palvelin alustallesi tarkoitetulla komentosarjalla. Palvelin on käytettävissä osoitteessa http://localhost:8080.

    Webswing
    webswing.sh
  2. 2

    Rekisteröi sovelluksesi

    Aseta hallintakonsolissa kohdassa http://localhost:8080/admin sovelluksen nimi, pääluokka, luokkapolku, JVM-argumentit ja kotihakemisto. Sovellus on tämän jälkeen käytettävissä osoitteessa http://localhost:8080/[app-name]/.

    CORS
    Lisää webforJ-sovelluksesi alkuperä sallittuihin alkuperiin, esim. http://localhost:8090.
    Portit
    Molemmat käyttävät yleensä porttia 8080. Muuta toista, jotta ne eivät ole ristiriidassa.
  3. 3

    Lisää riippuvuus

    webforj-webswing-moduuli tarjoaa WebswingConnectorin ja siihen liittyvät luokat.

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

    Upota ja määritä

    Lisää WebswingConnector näkymään kuten vaiheessa 1. WebswingOptions muuttaa sen toimintaa, esimerkiksi piilottamalla uloskirjautumispainikkeen, kun webforJ-sovelluksesi hoitaa kirjautumisen.

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

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

    connector.setOptions(options);