将网络摄像头面板添加到现有的 jPanel

Adding Webcam panel to existing jPanel

我正在使用 NetBeans,我在其中使用 jPanel 进行了基本布局。现在我想在这个 jPanel 中添加网络摄像头面板。

下面是如何从网络摄像头获取帧并将其显示在新 window 中的示例。一切正常。

    Webcam webcam = Webcam.getDefault();
    webcam.setViewSize(WebcamResolution.VGA.getSize());

    WebcamPanel panel = new WebcamPanel(webcam);
    panel.setFPSDisplayed(true);
    panel.setDisplayDebugInfo(true);
    panel.setImageSizeDisplayed(true);
    panel.setMirrored(true);

    JFrame window = new JFrame("Test webcam panel");
    window.add(panel);
    window.setResizable(true);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.pack();
    window.setVisible(true);

但是当我尝试在我现有的 jPanel 中显示它时,它不起作用。网络摄像头屏幕不可见。这是我的代码:

    Webcam webcam = Webcam.getDefault();
    webcam.setViewSize(WebcamResolution.VGA.getSize());

    WebcamPanel panel = new WebcamPanel(webcam);
    panel.setFPSDisplayed(true);
    panel.setDisplayDebugInfo(true);
    panel.setImageSizeDisplayed(true);
    panel.setMirrored(true);

    jPanel5.add(panel);
    jPanel5.setVisible(true);

我在主 class 构造函数中调用所有这些。在加载其他 netbeans 组件之后。当我添加示例时,它运行良好,但随后加载了我的主要布局,并且在另一个 window 中加载了网络摄像头屏幕。我想在同一个 window.

中得到它

我看过其他关于将图像添加到 jPanel 的主题,但它不适用于从网络摄像头捕捉电影。

感谢您的帮助。

But when I tried to display it in my existing jPanel it's not working.

当您将组件添加到可见的 GUI 时,基本代码是:

panel.add(...);
panel.revalidate(); // invoke the layout manager
panel.repaint(); // paint components

所有组件在创建时都具有默认大小 (0, 0),因此没有可绘制的内容。您需要调用布局管理器,以便为组件提供 size/location.

我稍微更改了我的应用程序,现在在主要 windows 的中间是 JTabbedPane,我找到了解决我的问题的方法。我没有使用 NetBeans window 设计器制作选项卡,而是使用代码制作它。

我在 Netbeans 中创建了空的 JTabbedPane,然后将其添加到代码中:

final JPanel jPanelCamera = new JPanel();

jTabbedPane1.addTab("Camera", jPanelCamera);

Webcam webcam = Webcam.getDefault();
webcam.setViewSize(WebcamResolution.VGA.getSize());

WebcamPanel webcamPanel = new WebcamPanel(webcam);
webcamPanel.setFPSDisplayed(true);
webcamPanel.setDisplayDebugInfo(true);
webcamPanel.setImageSizeDisplayed(true);
webcamPanel.setMirrored(true);

jPanelCamera.add(webcamPanel);
jPanelCamera.getParent().revalidate();

System.out.println("Camera OK");

我不知道为什么之前我使用 NetBeans 设计器制作组件时无法正常工作,但现在却运行良好。我认为如果有人不将此添加到 JTabbedPane,而是添加到 JPanel,则还应该使用代码制作此面板。不适用于 Netbeans 设计器,然后它应该可以工作。