gpt4 book ai didi

java - 将从网络摄像头获取的图像添加到现有的 JPanel

转载 作者:行者123 更新时间:2023-12-01 23:58:02 26 4
gpt4 key购买 nike

我试图在单击按钮时将从网络摄像头捕获的图像添加到现有的 JPanel,但 JPanel 从不显示该图像。有人能指出我正确的方向吗?

private void captureButtonActionPerformed(java.awt.event.ActionEvent evt) {
BufferedImage img1;
JLabel label;
final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

try {
grabber.start();
IplImage img = grabber.grab();
if (img != null) {

img1 = img.getBufferedImage();
ImageIcon icon = new ImageIcon(img1);
label = new JLabel(icon);
//photo is the name of the JPanel
photo.add(label);
photo.setVisible(true);
grabber.stop();
System.out.println("done");

}

} catch (Exception e) {
e.printStackTrace();
}

编辑:这是整个类(class)。 (修剪它以便于阅读)

package honoursproject;

import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class AddPerson extends javax.swing.JFrame {

/** Creates new form AddPerson */
public AddPerson() {
initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
nameField = new javax.swing.JTextField();
surnameField = new javax.swing.JTextField();
photo = new javax.swing.JPanel();
captureButton = new javax.swing.JButton();
saveButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

photo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

pack();
}// </editor-fold>

private void captureButtonActionPerformed(java.awt.event.ActionEvent evt) {
BufferedImage img1;
JLabel label;
final OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
JFrame frame = new JFrame();
try {
grabber.start();
IplImage img = grabber.grab();

if (img != null) {

img1 = img.getBufferedImage();
ImageIcon icon = new ImageIcon(img1);
label = new JLabel(icon);
//photo is the name of the JPanel
photo.add(label);
photo.setVisible(true);
grabber.stop();
System.out.println("done");


grabber.stop();
System.out.println("done");
}

} catch (Exception e) {
e.printStackTrace();
}
}



public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new AddPerson().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton cancelButton;
private javax.swing.JButton captureButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTextField nameField;
private javax.swing.JPanel photo;
private javax.swing.JButton saveButton;
private javax.swing.JTextField surnameField;
// End of variables declaration

}

最佳答案

如果您要向 photo JPanel 添加新组件,您将需要更新并绘制容器:

photo.revalidate();
photo.repaint();

或者,JLabel 也可以在启动时添加,允许您调用 setIcon更新图像。

更新:

您似乎没有在任何地方添加 JPanel 照片JFrame:

add(photo);
<小时/>

不要创建另一个 JFrame 来显示您的图像。使用原始的 JFrame 将其添加到您的 JPanel 中。请参阅this post .

关于java - 将从网络摄像头获取的图像添加到现有的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302889/

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