我创建了一个自定义JButton
覆盖setIcon
.
public class TestButton extends JButton {
public TestButton() {
super();
}
@Override
public void setIcon(Icon icon) {
super.setIcon(icon);
imgToBufferedImg(Toolkit.getDefaultToolkit().createImage("test.png"));
}
}
这是imgToBufferedImg方法。
public BufferedImage imgToBufferedImg(Image image) {
if (image == null) {
return null;
}
if (image instanceof BufferedImage) {
return ((BufferedImage) image);
} else {
BufferedImage bufferedImage = new BufferedImage(
image.getWidth(null),
image.getHeight(null),
BufferedImage.TYPE_INT_ARGB);
Graphics g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return bufferedImage;
}
}
我在 Matisse 中添加了这个组件,没问题,但是,当我尝试设置按钮的图标属性时,我得到了错误:
无法将值写入属性“图标”
问题似乎来自于imgToBufferedImg,因为如果我删除了对这个方法的调用,我可以设置属性setIcon
。我的图像转换方法有什么问题?
编辑:
以下测试成功:
try {
imgToBufferedImg(ImageIO.read(new FileInputStream("test.png")));
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
我也刚刚发现问题是由以下原因引起的:
((ImageIcon) icon).getImage();
在 UI 准备就绪时运行此代码(例如使用SwingUtilities.invokeLater
)似乎可以工作。