0

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

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

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

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

(我删除了绒毛注释和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();
 }  
4

0 回答 0