JButtonの画像をactionPerformedメソッド内で再描画
JButtonの画像をactionPerformedメソッド内で再描画したい。
以下のソースのようにして、再描画したいのです。
setIconメソッドではなく、
JButtonに対して描画したものに対して再描画したいです。
Graphics2DクラスについてJAVA APIで調べましたが、
仕組の理解に至りませんでした。
仕組みと方法を教えて頂きたいです。
よろしくお願いいたします。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class test extends JFrame implements ActionListener{
JButton b= new JButton();
public static void main(String a[]) {
new test();
}
public test() {
super();
this.setSize(100,100);
b.addActionListener(this);
b.add(new Zoom(new ImageIcon("img1.jpg"),0,0,50,50));
this.add(b);
this.setVisible(true);
}
class Zoom extends JComponent {
private static final long serialVersionUID = 1L;
private ImageIcon icon = null;
private int x = 0;
private int y = 0;
private int h = 0;
private int w = 0;
private double scale = 1.0d;
public Zoom(ImageIcon icon, int x, int y, int w, int h) {
super();
this.icon = icon;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.scale(scale, scale);
//////////////////////////////////
//画僧を再描画したい。
//g2.clearRect(0, 0, 80, 80);//×
g2.drawImage(icon.getImage(), x, y, w, h, this);
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b){
System.out.print("ok");
//this.repaint();//×
//b.repaint();//×
b.add(new Zoom(new ImageIcon("img2.jpg"),0,0,50,50));//(再描画できない)
//b.setIcon(new ImageIcon("img2.jpg"));//ok(再描画出来る)
}
}
}
お礼
ご回答ありがとうございました。 回答にありますように絶対パスで下記のように記述したのですがファイルがみつからない趣旨のエラー がでてしまいました。 URL soundUrl = getClass().getResource("C:/workspace/parts/beep/sound.wav");