我在这里遇到了几个问题,我想提前道歉。我知道通常的建议是,您最好在不使用 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();
}