【问题标题】:Unable to Switch JPanels after loading jcef browser window加载 jcef 浏览器窗口后无法切换 JPanel
【发布时间】:2015-06-22 13:09:53
【问题描述】:

我正在尝试在我的 swing 应用程序中使用 jcef 浏览器,但遇到了问题。 首先,我无法将 jcef 浏览器添加为 jFrame 上的 JPanel 组件。然后我尝试直接在jframe上添加 [code]getContentPane().add(browser.getUIComponent(), BorderLayout.CENTER);[/code]

现在,当浏览器窗口在 JFrame 中加载时,如果我想与其他 Jpanel 切换,那么它无法以任何方式工作 加载 CEF 浏览器后我无法切换屏幕。任何人都可以指出我需要做什么。这是我的测试 jframe。

import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class CardLayoutTst extends JFrame {
static CefBrowser browser = null;
static CefClient client = null;
private static final long serialVersionUID = 1L;
private JPanel cardPanel, jp1, jp2, buttonPanel;
private JLabel jl1, jl2;
private JButton btn1, btn2;
private CardLayout cardLayout = new CardLayout();

public CardLayoutTst() {
    setTitle("Test med CardLayout");
    setSize(400, 300);
    cardPanel = new JPanel();
    buttonPanel = new JPanel();
    cardPanel.setLayout(cardLayout);
    jp1 = new JPanel();
    jp2 = new JPanel();
    jl1 = new JLabel("Card 1");
    jl2 = new JLabel("Card 2");
    jp1.add(jl1);
    jp2.add(jl2);
    cardPanel.add(jp1, "1");
    cardPanel.add(browser.getUIComponent(), "2");
    btn1 = new JButton("Show Card 1");
    btn1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            cardLayout.show(cardPanel, "1");
        }
    });
    btn2 = new JButton("Show Card 2");
    btn2.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            cardLayout.show(cardPanel, "2");
        }
    });
    buttonPanel.add(btn1);
    buttonPanel.add(btn2);
    add(cardPanel, BorderLayout.NORTH);
    add(buttonPanel, BorderLayout.SOUTH);

    addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            CefApp.getInstance().dispose();
            dispose();
        }
    });

}

public static void main(String[] args) {
    client = CefApp.getInstance().createClient();
    browser = client.createBrowser("http://www.google.com", false, false);

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            CardLayoutTst frame = new CardLayoutTst();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}

}

【问题讨论】:

    标签: swing webbrowser-control chromium chromium-embedded


    【解决方案1】:

    有点晚了,但我也遇到了同样的问题。我的一个朋友解决了这个问题。

    您必须创建 CefSettings,将 windowless_rendering_enabled 设置为 false 并将此设置对象传递给 getInstance 调用:

    CefSettings settings = new CefSettings();
    settings.windowless_rendering_enabled = false;
    
    client = CefApp.getInstance(settings).createClient();
    

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2015-10-20
      • 2013-05-23
      • 2015-02-20
      • 2023-03-19
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多