2011-12-04 13 views
32

मैं मौजूदा स्विंग-एप्लिकेशन में वेब-ब्राउज़र-घटक को एकीकृत करने का एक तरीका ढूंढ रहा था और जावा FX 2.0 के लिए WebView पाया। इसके अलावा मुझे java.net पर एक ब्लॉग पोस्ट मिला जो how to integrate a Java FX component into a Swing Application दिखा रहा है। तो मुझे लगता है कि यह करने योग्य हो सकता है, लेकिन मैंने अभी तक कोशिश नहीं की है।एक स्विंग जावा एसई 6 अनुप्रयोग में जावाएफएक्स 2.0 वेबव्यू को एकीकृत करना

मुझे उत्सुकता है, क्या आपको लगता है कि यह एक अच्छा दृष्टिकोण है? क्या कोई बेहतर समाधान है? क्या यह भी करने योग्य है? क्या शायद कुछ बाहर निकल गया है?

प्रेरणा है: मैं एक मौजूदा घुमाओ-आवेदन, लंबी अवधि के लक्ष्य, सब पर पूरे जावा डेस्कटॉप आवेदन से छुटकारा पाने के लिए एक वेब और इसकी जगह अस्तित्व में कुछ WebBrowser- जो कुछ एकीकृत करना चाहते हैं -आधारित समाधान (योजना मौजूदा पहलुओं को धीरे-धीरे वेबपृष्ठों में परिवर्तित करना है जो तब वेबब्रोसर-घटक में प्रदर्शित होते हैं जब तक कि ब्राउज़र-कंकाल को छोड़कर स्विंग एप्लिकेशन के कुछ भी नहीं छोड़ा जाता है)। पाठ्यक्रम का बैकएंड जावा रहता है :-)

मैंने अभी तक कोशिश नहीं की है क्योंकि मुझे बस मेरी परियोजना के साथ जावाएफएक्स को एकीकृत करने का समय नहीं है (यह एक नौकरी है, हम केवल लंबे समय तक चलने वाले विकल्पों की खोज कर रहे हैं), इसलिए मैं जलने से पहले बेहतर पूछो।

+0

+1 केले के साथ बहुत कठिन काम मिश्रण सेब, – mKorbel

उत्तर

18

यह बहुत अच्छा है!

किसी को JavaFX 2.0 इंस्टॉल करना होगा, और किसी भी तरह क्लासपाथ में jfxrt.jar प्रबंधित करना होगा।

निम्नलिखित कोड एक जेएफआरएएम के अंदर JFXPanel प्रस्तुत करता है। जेएफएक्स पैनेल में WebView है जो google.com लोड करता है।

हालांकि, कम से कम मेरी मशीन पर, WebView बल्कि मैला लगता है। मैं मैक ओएस एक्स 10.6 पर काम कर रहा हूं; JavaFX 2.0 ओएस एक्स

वैकल्पिक मैंने पाया MozSwing है, जो बहुत आशाजनक देखा और काफी तेजी से वास्तव में महसूस करता है उसके लिये हम अभी भी बीटा में है। अफसोस की बात है कि परियोजना 2008 से आगे नहीं विकसित की जा रही है और बंडल एक्सयूएल धावक पुराना है (कोई नया फैंसी एचटीएमएल 5 नहीं)।

दोनों दृष्टिकोण मैवेन के माध्यम से शामिल करने के लिए एक दुःस्वप्न हैं, आप बेहतर ढंग से अपना स्थानीय भंडार स्थापित करते हैं।

import java.awt.Dimension; 
import java.awt.Point; 

import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class JavaFX { 

    /* Create a JFrame with a JButton and a JFXPanel containing the WebView. */ 
    private static void initAndShowGUI() { 
     // This method is invoked on Swing thread 
     JFrame frame = new JFrame("FX"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.getContentPane().setLayout(null); // do the layout manually 

     final JButton jButton = new JButton("Button"); 
     final JFXPanel fxPanel = new JFXPanel(); 

     frame.add(jButton); 
     frame.add(fxPanel); 
     frame.setVisible(true); 

     jButton.setSize(new Dimension(200, 27)); 
     fxPanel.setSize(new Dimension(300, 300)); 
     fxPanel.setLocation(new Point(0, 27)); 

     frame.getContentPane().setPreferredSize(new Dimension(300, 327)); 
     frame.pack(); 
     frame.setResizable(false); 

     Platform.runLater(new Runnable() { // this will run initFX as JavaFX-Thread 
      @Override 
      public void run() { 
       initFX(fxPanel); 
      } 
     }); 
    } 

    /* Creates a WebView and fires up google.com */ 
    private static void initFX(final JFXPanel fxPanel) { 
     Group group = new Group(); 
     Scene scene = new Scene(group); 
     fxPanel.setScene(scene); 

     WebView webView = new WebView(); 

     group.getChildren().add(webView); 
     webView.setMinSize(300, 300); 
     webView.setMaxSize(300, 300); 

      // Obtain the webEngine to navigate 
     WebEngine webEngine = webView.getEngine(); 
     webEngine.load("http://www.google.com/"); 
    } 

    /* Start application */ 
    public static void main(final String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       initAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

यह मेरे लिए ठीक काम करता है, लेकिन यह अविश्वसनीय रूप से धीमी है। (मेरे jquery ऐप के लिए सिस्टम ब्राउज़र में 10-100 धीमी गति से)। कोई विचार क्यों? क्या यह जावाएफएक्स है या शायद आप इसका इस्तेमाल करते हैं? – Daniel

+0

मेरा मानना ​​है कि यह जावाएफएक्स है। जैसा कि मैंने उल्लेख किया है, मेरी मशीन पर यह भी धीमा है, लेकिन मैंने सोचा कि शायद यह इस तथ्य के कारण था कि यह अभी भी ओएस एक्स – scravy

+0

पर बीटा है। मुझे Win7x64 और WinXP FYI – Daniel

3

आप एम्बेड करना घुमाओ हल्के वेब क्रोमियम इंजन पर आधारित ब्राउज़र की आवश्यकता है, तो आप JxBrowser पुस्तकालय पर एक नज़र ले जा सकते हैं। निम्नलिखित कोड को दर्शाता है JFrame में ब्राउज़र घटक एम्बेड और लोड करने के लिए कैसे कुछ वेब पेज:

import com.teamdev.jxbrowser.chromium.Browser; 
import com.teamdev.jxbrowser.chromium.swing.BrowserView; 

import javax.swing.*; 
import java.awt.*; 

/** 
* This sample demonstrates how to create Browser instance, 
* embed it into Swing BrowserView container, display it in JFrame and 
* navigate to the "www.google.com" web site. 
*/ 
public class BrowserSample { 
    public static void main(String[] args) { 
     Browser browser = new Browser(); 
     BrowserView browserView = new BrowserView(browser); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(browserView, BorderLayout.CENTER); 
     frame.setSize(700, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     browser.loadURL("http://www.google.com"); 
    } 
} 

वेब पेज क्रोमियम इंजन द्वारा रेंडर किया जाएगा।

यह ओपन सोर्स प्रोजेक्ट के लिए नि: शुल्क है;)

+0

संकेत के लिए बहुत बहुत धन्यवाद! –

+1

अब और अधिक नहीं ... –

+0

कृपया एक मुक्त ओपन-सोर्स लाइसेंस का अनुरोध करने के लिए [मूल्यांकन] (https://www.teamdev.com/jxbrowser#evaluate) वेब फ़ॉर्म का उपयोग करें। – Vladimir

संबंधित मुद्दे