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