【发布时间】:2017-01-30 05:00:38
【问题描述】:
我正在尝试制作一个扩展到周围 JPanel 的 javafx WebView。根据这个线程:http://www.coderanch.com/t/634791/JavaFX/java/Resizing-HTMLEditor-JavaFX,WebView 中有一个错误,您需要在 WebView 上调用GridPane.setHgrow 和GridPane.setVgrow。我已经在我的代码中添加了这些调用,但 WebView 仍然是 600x800px。
请注意,场景具有蓝色背景,因此您可以看到 javafx 的内容确实填满了整个 JPanel。但是 WebView 没有填充 javafx 组/场景。
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
public class Main {
private void initAndShowGUI() {
// This method is invoked on the EDT thread
JFrame frame = new JFrame("Swing and JavaFX");
frame.setSize(1000, 1000);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout(0, 0));
frame.getContentPane().add(panel, BorderLayout.CENTER);
JButton button = new JButton("button");
panel.add(button, BorderLayout.CENTER);
final JFXPanel fxPanel = new JFXPanel();
panel.add(fxPanel, BorderLayout.CENTER);
Platform.runLater(new Runnable() {
@Override
public void run() {
initFX(fxPanel);
}
});
}
private WebView webView;
private void initFX(JFXPanel fxPanel) {
// This method is invoked on the JavaFX thread
Scene scene = createScene();
fxPanel.setScene(scene);
GridPane.setHgrow(webView, Priority.ALWAYS);
GridPane.setVgrow(webView, Priority.ALWAYS);
}
private Scene createScene() {
Group root = new Group();
Scene scene = new Scene(root, Color.ALICEBLUE);
webView = new WebView();
GridPane.setHgrow(webView, Priority.ALWAYS);
GridPane.setVgrow(webView, Priority.ALWAYS);
WebEngine webEngine = webView.getEngine();
webEngine.load("http://www.google.com");
root.getChildren().add(webView);
GridPane.setHgrow(webView, Priority.ALWAYS);
GridPane.setVgrow(webView, Priority.ALWAYS);
return scene;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Main().initAndShowGUI();
}
});
}
}
【问题讨论】: