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 に追加しましたが、問題ありませんが、ボタンのアイコン プロパティを設定しようとすると、エラーが発生します。
プロパティ「アイコン」への値の書き込みに失敗しました
でこのメソッドへの呼び出しを削除するとプロパティを設定できるため、問題はimgToBufferedImgsetIcon
から発生しているようです。画像変換方法の何が問題になっていますか?
編集:
次のテストは成功しました:
try {
imgToBufferedImg(ImageIO.read(new FileInputStream("test.png")));
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
また、問題の原因は次のとおりであることがわかりました。
((ImageIcon) icon).getImage();
UI の準備ができたら (たとえば、 a を使用してSwingUtilities.invokeLater
) このコードを実行するとうまくいくようです。