2017-05-20 6 views
3

私は具体的なWebページについて取り組んでおり、javafx.embed.swing.JFXPanelとその機能とスイングGUIを関連づけたいと思います。 jfxPanelJTabbedPaneに移動しますか? JFXPanelの2つの方法があります。JTabbedPane内のJFXPanelでWebViewを見つけるにはどうすればよいですか?

private JFXPanel getSearchPanel() { 
    jfxPanel = new JFXPanel(); 
    createScene(); 
    setLayout(new BorderLayout()); 
    jfxPanel.setVisible(true); 
    return jfxPanel; 
} 

private void createScene() { 
    PlatformImpl.startup(new Runnable() { 
     @Override 
     public void run() { 
      Pane root = new WebViewPane(); 
      Scene scene = new Scene(root, 80, 50); 
      jfxPanel.setScene(scene); 
     } 
    }); 
} 

と私はブラウザのJTabbedPaneを作成する方法:

private void createNewTab() { 
     JPanel panel = new JPanel(new BorderLayout()); 
     startPage = startPageField.getText(); 
     panel.add(new JScrollPane(getSearchPanel()), BorderLayout.CENTER); 
     tabPane.setBackground(Color.PINK); 
     tabPane.addTab(startPage, panel); 
    } 

任意の助けや協力いただき、ありがとうございます!

+0

問題は何ですか? – Yahya

+0

WebブラウザでnewTab(createNewTab())を作成し、jfxPanelに設定したいと思います。 –

答えて

2

javafx.scene.web.WebViewを使用してこのexampleを使用して以下の変更を行い、以下の結果を得ました。 createTab()メソッドを使用すると、FXPanelが適切な優先サイズを持ち、内容がJavaFXスレッドで作成されることが保証されます。一般に

JTabbedPane jtp = new JTabbedPane(); 
jtp.add("One", createTab("http://www.example.com")); 
jtp.add("Two", createTab("http://www.example.net")); 
jtp.add("Three", createTab("http://www.example.org")); 
frame.add(jtp, BorderLayout.CENTER); 

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import javax.swing.JFrame; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingUtilities; 
import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 

/** 
* @see https://stackoverflow.com/a/44091479/230513 
* @see https://stackoverflow.com/a/31576647/230513 
*/ 
public class WebViewTest { 

    private void initAndShowGUI() { 
     // This method is invoked on the EDT thread 
     JFrame frame = new JFrame("WebViewTest"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTabbedPane jtp = new JTabbedPane(); 
     jtp.add("One", createTab("http://www.example.com")); 
     jtp.add("Two", createTab("http://www.example.net")); 
     jtp.add("Three", createTab("http://www.example.org")); 
     frame.add(jtp, BorderLayout.CENTER); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private JFXPanel createTab(String s) { 
     final JFXPanel fxPanel = new JFXPanel() { 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(640, 480); 
      } 
     }; 
     Platform.runLater(() -> { 
      initFX(fxPanel, s); 
     }); 
     return fxPanel; 
    } 

    private void initFX(JFXPanel fxPanel, String s) { 
     // This method is invoked on the JavaFX thread 
     StackPane root = new StackPane(); 
     Scene scene = new Scene(root); 
     WebView webView = new WebView(); 
     WebEngine webEngine = webView.getEngine(); 
     webEngine.load(s); 
     root.getChildren().add(webView); 
     fxPanel.setScene(scene); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new WebViewTest()::initAndShowGUI); 
    } 
} 

、他のWebエンジンの実装はnot supportedあります。

+0

ありがとう!わたしにはできる –

関連する問題