【问题标题】:add image to JPanel in NetBeans在 NetBeans 中将图像添加到 JPanel
【发布时间】:2015-06-18 10:40:46
【问题描述】:

我是 java swing 的新手,我现在正在使用 NetBeant 使用 NetBeans 中内置的拖放设计器来构建 GUI。我现在面临的问题是,我有下面发布的代码,它是用 Eclipse 编写的,如你所见 我有一个扩展 JPanel 的类,我将从 WEB_CAM 捕获的图像添加到该 JPanel。现在,自从我切换到 NetBeans 后,我使用设计器创建了 JFrame、JPanel、JButton,并且在我用 NetBeans 编写的代码中,我不 知道如何将捕获的图像添加到 JPanel。

在 Eclipse 中,我在另一个类中创建了下面发布的代码,但在 NetBeans 中,每件事都是自动生成的,我必须做与 Eclipse 中相同的工作。我不知道如何在 NetBeans 中将图像添加到 JPanel。

Eclipse 中的 JPanel

class FacePanel extends JPanel {
private BufferedImage image;
int count = 0;

public FacePanel() {
    super();
}

public void setFace (BufferedImage img) {
    this.image = img;
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    if (this.image == null) {
        System.out.println("image is null");
        return;
    }

    g.drawImage(this.image, 10, 10, this.image.getWidth(), this.image.getHeight(), null);
    g.setFont(new Font("arial", 2, 20));
    g.setColor(Color.WHITE);
    g.drawString("processing frame by frame [ frame: " + ( count++) +  " ]", 150, 150);
}

}

NetBeans 中的代码

    private void initComponents() {

    jpanel1_Preview = new javax.swing.JPanel();
    btn_Play = new javax.swing.JButton();
    btn_Pause = new javax.swing.JButton();
    btn_Capture = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jpanel1_Preview.setBorder(javax.swing.BorderFactory.createTitledBorder("Cam_Preview"));

    javax.swing.GroupLayout jpanel1_PreviewLayout = new javax.swing.GroupLayout(jpanel1_Preview);
    jpanel1_Preview.setLayout(jpanel1_PreviewLayout);
    jpanel1_PreviewLayout.setHorizontalGroup(
        jpanel1_PreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );
    jpanel1_PreviewLayout.setVerticalGroup(
        jpanel1_PreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 225, Short.MAX_VALUE)
    );

    btn_Play.setText("play");
    btn_Play.setSelected(true);

    btn_Pause.setText("pause");
    btn_Pause.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btn_PauseActionPerformed(evt);
        }
    });

    btn_Capture.setText("capture");
    btn_Capture.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btn_CaptureActionPerformed(evt);
        }
    });

【问题讨论】:

  • 只要 FacePanel 位于 Netbeans Projects 类路径中(您可能需要进行清理和构建),您应该能够将其从项目资源管理器拖到表单设计器中
  • @MadProgrammer 对不起,我没明白,你的意思是我应该将 jpanel 类添加到 netbeans,然后将其绘制给设计器吗?..请另一个问题,设计器有什么办法吗?指定要添加到 jpanel 的图像?
  • 基本上,是的。将FacePanel 拖动到您希望它出现的任何形式。基于FacePanel,我想说设置图像的唯一方法是通过setFace 方法,我很确定表单编辑器不会选择它
  • @MadProgrammer 不幸的是设计师不允许拖动类

标签: java swing netbeans jframe jpanel


【解决方案1】:
  1. class FacePanel extends JPanel { 更改为 public class FacePanel extends JPanel {,否则 Netbeans 将无法创建它的实例。
  2. 执行“清理和构建”
  3. FacePanel 类从项目资源管理器拖到您的表单中...

【讨论】:

  • 谢谢,尽管问题现在已经解决了,但我不想使用 netbeans,我想切换到 eclipse 的窗口构建器。我读了一些关于它的帖子,我有点困惑,不要知道它是免费的吗?任何想法
  • 不知道,从未使用过 Eclipse。实际上,您最好学习为您的 UI 编写代码,这样您就不会被单一工具束缚,并学习使任何表单编辑器正常工作所需的技巧和窍门。
猜你喜欢
  • 1970-01-01
  • 2012-05-24
  • 2012-08-30
  • 2012-07-12
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多