gpt4 book ai didi

Java swing jbutton 充电旧图像

转载 作者:行者123 更新时间:2023-12-02 12:40:12 24 4
gpt4 key购买 nike

我创建了一个像这样的自定义 Java 按钮

 public class GraphicPaintedButton extends JButton implements ToPaint{

protected BufferedImage background;
private boolean painted = false;

public GraphicPaintedButton() {

}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(painted){
System.out.println("PAINTING!");
Dimension size = getSize();
g.drawImage(background, 0, 0,size.width, size.height,0, 0, background.getWidth(), background.getHeight(), null);
}
}

@Override
public void loadImage(String url){

painted = true;
URL imagePath = getClass().getResource(url);
BufferedImage result = null;
try {
result = ImageIO.read(imagePath);
} catch (IOException | IllegalArgumentException e) {
System.err.println("Errore, immagine non trovata");
e.printStackTrace();
}
background = result;
}
}

如果我在按钮上加载图像,它会调用重绘,并且很好,会显示图像,当我加载新图像时,它会再次调用重绘并显示新图像。问题是当我将鼠标移到按钮上时,它会调用 rapaint,但会加载旧图像。为什么?它是如何获得旧图像的,因为新图像应该取代它?

最佳答案

我不知道你为什么要进行此扩展而不是简单地使用按钮的 icon 属性,但是...

首先,我要去掉 painted 标志,它存在允许 paintComponent 方法尝试绘制 null 的风险> 图像,因为 loadImage 方法可能会失败,但 painted 标志始终设置为 true - 让我们面对现实吧,您很容易就结束了painted == truebackground == null ...这不是有效状态

相反,请推理您感兴趣的实际状态...

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
Dimension size = getSize();
g.drawImage(background, 0, 0, size.width, size.height, 0, 0, background.getWidth(), background.getHeight(), null);
}
}

我还会更改 loadImage 方法

public void loadImage(URL url) throws IOException {
background = ImageIO.read(url);
revalidate();
repaint();
}

首先,不要使用String,它的含义是不明确的,而是指定您愿意处理的最低通用参数。

其次,图像要么会加载,要么不会加载,如果您不打算以任何有意义的方式处理异常,请将其传递回调用者,调用者可能更适合处理它- 恕我直言

我不知道这是否重要,但我也会考虑重写 getPreferredSize 方法...

@Override
public Dimension getPreferredSize() {
return background == null ? new Dimension(10, 10) : new Dimension(background.getWidth(), background.getHeight());
}

这至少会尝试将按钮的大小与图像的大小相匹配

关于Java swing jbutton 充电旧图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com