gpt4 book ai didi

swing - 加载 jcef 浏览器窗口后无法切换 JPanels

转载 作者:行者123 更新时间:2023-12-01 05:03:44 27 4
gpt4 key购买 nike

我正在尝试在我的 Swing 应用程序中使用 jcef 浏览器,但遇到了问题。
首先,我无法将 jcef 浏览器添加为 jFrame 上的 JPanel 组件。然后我尝试直接在 jframe 上添加
[代码]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);
}
});
}

}

最佳答案

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

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

CefSettings settings = new CefSettings();
settings.windowless_rendering_enabled = false;

client = CefApp.getInstance(settings).createClient();

关于swing - 加载 jcef 浏览器窗口后无法切换 JPanels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30980845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com