[英]Adding an image obtained from webcam to an existing JPanel
單擊按鈕時,我試圖將從網絡攝像機捕獲的圖像添加到現有的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();
}
編輯:這是全班。 (對其進行了整理以使其更易於閱讀)
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
}
我通過使用JLabel而不是JFrame或JPanel解決了該問題,並且可以正常工作。
您忘記了調用setIcon
:
label.setIcon(icon);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.