Swing JInternalFrame

时间:2018-08-03 12:36:11

标签: java swing browser swt

我正在尝试在JInternalFrame中实现swt浏览器。 我找到了that示例,并使用示例中的扩展Canvas类进行了尝试。如果我在JFrame中构建它,则它可以毫无问题地运行。该示例顶部的注释中是这种情况:

  

只有在托管的Swing组件(例如JFrame)可见之后才能创建浏览器组件-通常在frame.setVisible(true)之后。

我认为这是我的问题,因此尝试在JPanel上使用层次结构化的侦听器解决此问题。因此,当组件可见时,浏览器将被初始化,但将无法使用。有人有主意吗?

我的简单尝试:

JDesktopPane desktopPane = new JDesktopPane();

    BrowserCanvas browser = new BrowserCanvas();
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(browser);
    panel.setVisible(true);
    panel.addHierarchyListener(new HierarchyListener() {
        @Override
        public void hierarchyChanged(HierarchyEvent e) {
            if (e.getChangeFlags() == HierarchyEvent.SHOWING_CHANGED) {
                if (e.getComponent().isVisible()) {
                    if (browser.initialise()) {
                        browser.setUrl("www.google.de");
                    }
                }
            }
        }
    });

    JInternalFrame iframe = new JInternalFrame("Browser");
    iframe.setContentPane(panel);
    iframe.setLocation(200, 200);
    iframe.setSize(400, 400);
    iframe.setVisible(true);

    desktopPane.add(iframe);

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

0 个答案:

没有答案