我正在尝试在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);