我试图在点击按钮时将我从网络摄像头捕获的图像添加到现有的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
}
答案 0 :(得分:3)
如果您要为photo
JPanel
添加新组件,则需要更新&amp;画容器:
photo.revalidate();
photo.repaint();
或者,也可以在启动时添加JLabel
,允许您拨打setIcon来更新图片。
更新:
您似乎 将JPanel
photo
添加到JFrame
的任何地方:
add(photo);
不要创建另一个JFrame
来显示您的图片。使用原始JPanel
将其添加到JFrame
。请参阅this post。
答案 1 :(得分:0)
我通过使用JLabel而不是JFrame或JPanel来解决它,它可以工作。
答案 2 :(得分:0)
您忘了拨打setIcon
:
label.setIcon(icon);