[英]How to resize the children WebView/JFXPanel from the JPanel without loading URL every time?
我在TabbedPane
有一个JPanel
,它包含一个带有WebView
的JFXPanel
,我在面板上设置了一个ComponentListener
,以便每次调整面板大小时调整其子JFXPanel
和WebView
大小。 我想要的是每次调整面板大小时,URL(网站)中的内容都不会被加载。 我希望内容保持加载状态,只是调整大小。
正在加载的内容是网站的主页,例如当我调整面板大小时,我被重定向到该主页,我设置为URL并且我不想丢失页面,我当前打开。
避免重新加载的第二个原因是有时它会持续几秒钟,我想避免这种过载。
我最初尝试使用静态变量以便只打开一次URL,但是在调整大小时,页面不再显示...只出现一个白页。
这是代码:
public class RtcOverview extends JPanel {
String url = "http://10.112.85.142:8080/petshopJSF/";
public RtcOverview() {
super();
this.setVisible(true);
this.doLayout();
this.add(jfxPanel);
this.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(ComponentEvent e) {
initComponents();
}
});
}
private void initComponents() {
Platform.runLater(new Runnable() {
@Override
public void run() {
final WebView view = new WebView();
int width = getParent().getWidth();
int height = getParent().getHeight();
view.setMinSize(width, height);
view.setPrefSize(width, height);
engine = view.getEngine();
engine.load(url);
Scene scene = new Scene(view);
jfxPanel.setScene(scene);
Platform.setImplicitExit(false);
}
});
}
}
安德鲁汤普森在上面的评论中给了我这个答案。 每次调整JPanel大小时都不需要调用initComponents()方法。 而不是使用这个块
this.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(ComponentEvent e) {
initComponents();
}
});
我使用了以下内容
this.setLayout(new BorderLayout());
this.add(jfxPanel, BorderLayout.CENTER);
它起作用了。 JFXPanel会像其父JPanel一样调整大小,而无需再次加载url并且每次都初始化所有变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.