web-dev-qa-db-fra.com

Comment utiliser HTML et CSS comme interface graphique d'application Java?

Je veux concevoir un nouveau client Git avec une interface graphique épurée.

Est-il possible d'utiliser la puissance du HTML, du CSS et du JavaScript dans une application Java?

J'aimerais utiliser Java + JGit pour les modèles, Java pour les contrôleurs et HTML + CSS + JavaScript pour les vues.

Je ne veux pas de modèle client-serveur. Je voudrais bien intégrer Java et HTML. Un événement DOM déclencherait des événements directement sur un contrôleur Java. De cette façon, il serait possible de créer une application hors ligne riche.

18
Guillaume Massé

Vous pouvez intégrer un composant de navigateur Web à votre application Java Swing/JavaFX Desktop qui affiche une interface graphique construite avec HTML5 + CSS + JavaScript. Vous pouvez voir un article décrivant comment procéder à l'adresse http://Java.dzone.com/articles/htmlcssjavascript-gui-Java-0

L’une des bibliothèques Java Swing/JavaFX permettant d’intégrer Chromium dans des applications Java est JxBrowser . En utilisant l'API JxBrowser, vous pouvez charger n'importe quelle page Web et utiliser ses DOM et JavaScript. Vous pouvez même appeler des méthodes Java à partir de code JavaScript et inversement. Par exemple:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSFunctionCallback;
import com.teamdev.jxbrowser.chromium.JSObject;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;

public class JavaScriptJavaSample {
    public static void main(String[] args) {
        Browser browser = new Browser();
        browser.addLoadListener(new LoadAdapter() {
            @Override
            public void onFinishLoadingFrame(FinishLoadingEvent event) {
                if (event.isMainFrame()) {
                    Browser browser = event.getBrowser();
                    JSObject window = (JSObject)
                            browser.executeJavaScriptAndReturnValue("window");
                    window.setProperty("MyFunction", new JSFunctionCallback() {
                        @Override
                        public Object invoke(Object... args) {
                            for (Object arg : args) {
                                System.out.println("arg = " + arg);
                            }
                            return "Hello!";
                        }
                    });
                    JSValue returnValue = browser.executeJavaScriptAndReturnValue(
                            "MyFunction('Hello JxBrowser!', 1, 2, 3, true);");
                    System.out.println("return value = " + returnValue);
                }
            }
        });
        browser.loadURL("about:blank");
    }
}
12
Vladimir

Ce n'est pas vraiment faisable. Les clients riches en Java sont réalisés en utilisant Swing ou SWT.

Si vous souhaitez utiliser HTML/CSS pour votre interface utilisateur, vous devez utiliser le modèle serveur/client. Cela peut être aussi simple que de créer un serveur local et de lancer un navigateur qui s'y connecte, mais ce serait toujours ce modèle.

Si vous avez absolument besoin de HTML/CSS comme infrastructure d'interface utilisateur et que vous ne pouvez pas utiliser un modèle serveur/client, votre meilleur choix est probablement de ressembler à Google Native Client, mais cela utilise des liaisons C/C++ sur le backend. Je n'ai pas utilisé Native Client, je ne peux donc pas donner beaucoup plus d'informations personnelles à ce sujet.

Modifier pour ajouter:

Une option consiste à intégrer un navigateur natif à votre application Swing en utilisant quelque chose comme: http://djproject.sourceforge.net/ns/

Il existe quelques moteurs de rendu HTML Java purs, cependant, ils ne seront probablement pas entièrement compatibles avec HTML5/CSS3, encore moins possiblement avoir des bogues Javascript.

Voir ici pour certaines de ces options: Visionneur/rendu HTML pur Java à utiliser dans un panneau défilant

6
Reverend Gonzo

Comme @Reverand Gonzo dit, vous aurez besoin d'une forme de serveur/client. Mais vous pouvez facilement intégrer un serveur Jetty dans une application Java, puis utiliser GWT pour votre code client }.

4
tinyd

Utilisez Angular.js avec HTML et restez comme dans Java, utilisez simplement des classes pour la logique métier, inutile d’écrire du code pour awt/swing. Angular avec démarrage à ressort sont un développement rapide en Java pour une application Web avec moins de code en Java sans utilisation de Swing pour créer la meilleure application Web.

0
Sunil Wagh

JavaFX 2.2 a amené cette fonctionnalité à fournir un composant d'interface utilisateur doté d'une vue Web et d'une fonctionnalité de navigation complète.

Pour plus de détails, voir Ajout de contenu HTML aux applications JavaFX .

0
Sandeep Singh

Vous pouvez utiliser les puissances HTML, CSS et JavaScript dans votre application Swing en utilisant JFXPanel pour intégrer JavaFX WebView. Consultez la démonstration de SimpleSwingBrowser dans ce lien: https://docs.Oracle.com/javase/8/javafx/interoperability-tutorial/swing-fx-interoperability.htm

WebView permet d'appeler des fonctions JavaScript à partir de Java et inversement. C'est également un bon moyen d'améliorer votre ancienne application Java avec les technologies Web.

0
johnk