繁体   English   中英

如何从JPanel调整子WebView / JFXPanel的大小,而不是每次都加载URL?

[英]How to resize the children WebView/JFXPanel from the JPanel without loading URL every time?

我在TabbedPane有一个JPanel ,它包含一个带有WebViewJFXPanel ,我在面板上设置了一个ComponentListener ,以便每次调整面板大小时调整其子JFXPanelWebView大小。 我想要的是每次调整面板大小时,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM