2011-08-24 15 views
17

Voglio progettare un nuovo client Git con una GUI pulita.Come utilizzare HTML e CSS come GUI dell'applicazione Java?

È possibile utilizzare la potenza di HTML, CSS e JavaScript in un'applicazione java?

Mi piacerebbe utilizzare Java + JGit per i modelli, Java per i controller e HTML + CSS + JavaScript per le viste.

Non voglio un modello client-server. Mi piacerebbe integrare bene Java e HTML. Un evento DOM genererebbe eventi direttamente su un controller Java. In questo modo sarebbe possibile creare una ricca applicazione offline.

risposta

8

È possibile incorporare il componente del browser Web nell'applicazione Java Swing/JavaFX Desktop che visualizza la GUI costruita con HTML5 + CSS + JavaScript. È possibile visualizzare un articolo che descrive come eseguire questa operazione su http://java.dzone.com/articles/htmlcssjavascript-gui-java-0

Una delle librerie Java Swing/JavaFX che consente l'integrazione di Chromium in applicazioni Java è JxBrowser. Usando l'API JxBrowser puoi caricare qualsiasi pagina web e lavorare con il suo DOM e JavaScript. Puoi persino chiamare i metodi Java dal codice JavaScript e viceversa. Per esempio:

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"); 
    } 
} 
+0

Puoi anche usare Scala.js per compilare scala in javascript. –

+0

Devi ancora collegare cose da JVMWorld a JSWorld –

+0

Questo è vero. Per rendere possibile l'API fornisce wrapper per i tipi primitivi JavaScript (JSValue) e gli oggetti (JSObject). – Vladimir

6

Non è davvero fattibile. I rich client in Java sono fatti usando Swing o SWT.

Se si desidera utilizzare HTML/CSS per l'interfaccia utente, è necessario utilizzare il modello server/client. Può essere semplice come creare un server locale e avviare un browser che si connette ad esso, ma sarebbe comunque quel modello.

Se è assolutamente necessario avere HTML/CSS come framework dell'interfaccia utente e non è possibile accedere a un modello server/client, la soluzione migliore è probabilmente quella di qualcosa come Google Native Client, ma che utilizza i binding C/C++ su il back-end. Non ho usato Native Client quindi non posso dare molte più informazioni su questo fronte.

Modifica per aggiungere:

Una possibilità è quella di incorporare un browser nativo nel vostro swing applicazione utilizzando qualcosa di simile: http://djproject.sourceforge.net/ns/

Ci sono alcuni renderer Java HTML puro, tuttavia, molto probabilmente vinto' t essere pienamente compatibile con HTML5/CSS3, per non parlare di avere anche dei bachi Javascript.

vedi qui per alcune di queste opzioni: Pure Java HTML viewer/renderer for use in a Scrollable pane

+0

Sì, penso che dovrò utilizzare un modello client-server. Il vantaggio è che le persone possono utilizzare il proprio browser e gestire da remoto i repository git dei locals. –

0

JavaFX 2.2 ha portato questa funzionalità per fornire una componente dell'interfaccia utente (GUI) che ha vista web e la piena funzionalità di navigazione.

Per ulteriori dettagli, vedere Adding HTML Content to JavaFX Applications.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/17979498) – Tschallacka

Problemi correlati