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


Je veux concevoir un nouveau client Git avec une interface graphique propre.

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

Je voudrais 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.

Author: Shadow Wizard, 2011-08-24

5 answers

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

L'une des bibliothèques Java Swing/JavaFX qui permet d'intégrer Chromium dans des applications Java est JxBrowser. En utilisant l'API JxBrowser, vous pouvez charger n'importe quelle page Web et travailler avec son DOM et JavaScript. Vous pouvez même appeler Méthodes Java à partir du code JavaScript et vice versa. 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
Author: Vladimir, 2016-08-01 12:20:17

Ce n'est pas vraiment faisable. Les clients riches en Java sont effectué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 d'avoir HTML / CSS comme cadre d'interface utilisateur et que vous ne pouvez pas accéder à un modèle serveur / client, votre meilleur pari est probablement de regarder quelque chose comme Google Native Client, mais cela utilise des liaisons C/C++ sur le backend. Je n'ai pas utilisé de client natif, donc je ne peux pas donner personnellement beaucoup plus d'informations sur ce front.

Modifier pour ajouter:

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

Il existe des moteurs de rendu HTML Java purs, cependant, ils ne seront probablement pas entièrement compatibles HTML5/CSS3, sans parler des bogues Javascript.

Voir ici pour certaines de ces options: Pure Java HTML viewer / renderer pour une utilisation dans un volet défilable

 6
Author: Reverend Gonzo, 2017-05-23 12:10:30

Comme le dit @Reverand Gonzo, 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
Author: tinyd, 2011-08-24 14:37:25

JavaFX 2.2 a apporté cette fonctionnalité pour fournir un composant d'interface utilisateur (GUI) qui a une vue Web et une fonctionnalité de navigation complète.

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

 0
Author: Sandeep Singh, 2017-11-17 11:30:50

Vous pouvez apporter la puissance de HTML,CSS,JavaScript dans votre application Swing en utilisant JFXPanel pour intégrer JavaFX WebView. Jetez un oeil à la démo SimpleSwingBrowser dans ce link:https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/swing-fx-interoperability.htm

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

 0
Author: johnk, 2018-03-07 15:35:46