在Netbeans中更新JLabel图像(GUI Builder用户,抱歉)

时间:2015-09-20 15:03:09

标签: java image swing netbeans gui-builder

我在这里遇到了几个问题,我想提前道歉。我知道常见的建议是你最好不要使用GUI构建器,以便更好地理解这些工作,因为我知道初学者手中的GUI构建就像是在不知道的情况下解决整个问题。零件。

三个重要组件是imageArea,toBoatBtn和toRespBtn。 我已经在Netbeans中将imageArea的“自定义创建代码”设置为“ new loadImage(1); ”以加载第一个图像。这一点很好。

两个按钮应该更改imageArea中的图像。 toBoatBtn应该加载第二个图像( loadImage(2)),而toRespBtn应该加载初始图像( loadImage(1))。

我不知道如何继续这个过程。它没有改变图像。我已经尝试重新验证和重新绘制,将继承更改为JPanel并对其进行更改,但仍然没有运气。 这不是第二个图像的错误路径名的情况,因为如果我将Netbeans中的“自定义创建代码”设置为“new loadImage(2);”,它也会显示出来。 我真的想用这个而不是使用JLabel.setIcon(参数),因为有可能放大并重新定位图像(我甚至无法弄明白这一点,所以这肯定是不稳定的)。我感谢任何帮助。

(我删除了绒毛评论以及netbeans不允许您触摸的代码。)

package source;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;

class loadImage extends JLabel {

BufferedImage img;

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(img,0,0,getWidth(),getHeight(),this);
                System.out.println("\nImgWidth: " + img.getWidth()
                            + "\nFrameWidth: " + getWidth()
                            + "\nImgHeight: " + img.getHeight()
                            + "\nFrameHeight: " + getHeight()
                           );
}

public loadImage(int imageToUse) {
    System.out.println("Image Num: " + imageToUse);
   try {
       if(imageToUse == 1)
       {
           img = ImageIO.read(new File("resp.png"));
       }
       else 
       {
           img = ImageIO.read(new File("boat.png"));         
       }
   } catch (IOException e) {}

}
}

/****************************************************************/
public class NewJFrame extends javax.swing.JFrame{

public NewJFrame() {
    initComponents();
    setLocationRelativeTo(null);

}

private void toBoatBtnActionPerformed(java.awt.event.ActionEvent evt)     {                                         
    imageArea = new loadImage(2);
    super.revalidate();  
    super.repaint();                
}                                        

private void toRespBtnActionPerformed(java.awt.event.ActionEvent evt) {                                         
    imageArea = new loadImage(1);
    super.revalidate();   
    super.repaint();
}                                        


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });


}

// Variables declaration - do not modify                     
private javax.swing.JLabel imageArea;
private javax.swing.JButton toBoatBtn;
private javax.swing.JButton toRespBtn;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel workspace;
// End of variables declaration                   

}

编辑:loadImage更改

public loadImage() {

    try {
        img = ImageIO.read(new File("resp.png"));
    } catch (IOException ex) {}

}

public void setImage(int imageToUse)
{
   System.out.println("Image Num: " + imageToUse);
   try {
       if(imageToUse == 1)
       {
           img = ImageIO.read(new File("resp.png"));
       }
       else 
       {
           img = ImageIO.read(new File("boat.png"));         
       }
   } catch (IOException e) {
   }
}
编辑:由于Fast Snail,问题解决了。非常感谢帮助!我还会读到关于Hovercraft Full of Eels建议的setIcon方法。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)    {                                         
     ((loadImage)imageArea).setImage(2);
     this.repaint();
 }  

0 个答案:

没有答案