java drawImage无法从事件中运行

时间:2012-10-29 08:54:18

标签: java swing awt jlabel java-2d

我有一个扩展jlabel的类,并使用paintComponent在其上绘制,如下所示 这是paintPhotos.java

package myApp;
import java.awt.*;
import javax.swing.*;
/**
*
* @author PAGOLINA
*/
public class paintPhotos extends javax.swing.JLabel {

    public Image img; int w; int h;
public paintPhotos(Image img, int w, int h) {
    this.img = img; this.w = w; this.h = h;
    System.out.println("am paintclass");
 }
@Override
public void paintComponent(Graphics p) {
    System.out.println("am here");
    super.paintComponent(p);
    Graphics2D g2 = (Graphics2D) p;
    p.drawImage(img, 0, 0, w, h, this);
}

}

当我尝试从另一个类的构造函数中绘制时(AddScore.java)。

public AddScore() {
    initComponents();
    setLocationRelativeTo(null);
    removeNotify();
    setUndecorated(true);
    Image imag = new  ImageIcon(this.getClass().getResource("img/top_bg.jpg")).getImage();
    showPix1.setLayout(new BorderLayout());
    showPix1.add(new paintPhotos(imag,40,40), BorderLayout.CENTER);
}

上述工作正常并按指定的方式绘制图像。

但是当我尝试从这样的另一个类(AddScore.java)的actionperform事件中绘制图像时。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    Image imag = new ImageIcon(this.getClass().getResource("img/top_bg.jpg")).getImage();
            showPix1.setLayout(new BorderLayout());
            showPix1.add(new paintPhotos(imag,20,20), BorderLayout.CENTER);
}

上述声明无效,因为paintcomponent不起作用, 我做错了什么?

有人请帮助我这个cos我已经尝试了所有可行的方法来调用我的paintPhotos类但是没有用,这个代码有什么问题?

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Image imag = new ImageIcon(this.getClass().getResource("img/top_bg.jpg")).getImage();
        showPix1.setLayout(new BorderLayout());
        showPix1.add(new paintPhotos(imag,20,20), BorderLayout.CENTER);
}

1 个答案:

答案 0 :(得分:5)

  1. Image作为Icon / ImageIcon添加到JLabel

  2. 在这种情况下,不要在飞行中加载图像,将其加载为局部变量

  3. {li>

    Icon / ImageIcon JLabel使用正确的LayoutManager

  4. 常见问题是Icon / ImageIcon不会返回任何例外,必须测试null value

  5. 在发布SSCCE

  6. 后尽早获得更好的帮助